Avatar billede Superstes Novice
11. april 2012 - 14:46 Der er 7 kommentarer

To tabeller, én fællesnævner, flere kriterier

Følgende data findes i to tabeller i samme access-databse:

Tabel1
CPR, UDatoTid, Rek1

Tabel2
CPR, GDatoTid, Niveau, Rek2

Jeg vil gerne have, at for hver record i Tabel1, skal der præsenteres
CPR, Niveau, UdatoTid, GDatoTid, Rek1, Rek2, hvor fællesnævneren er CPR, og hvor GDatoTid er den højeste værdi, der samtidig er mindre end UdatoTid. (samme CPR kan godt figurere mange gang i begge tabeller)

Giver det mening? Kan det løses?

Nogen der kan slynge en sql ud af ærmet?
Avatar billede mireigi Novice
11. april 2012 - 18:46 #1
Umiddelbart vil jeg sige at du kan bruge følgende:

SELECT TOP (1) t1.CPR, t2.Niveau, t1.UDatoTid, t2.GDatoTid, t1.Rek1, t2.Rek2
FROM Tabel1 AS t1 INNER JOIN Tabel2 AS t2 ON t1.CPR = t2.CPR
WHERE (t2.GDatoTid < t1.UDatoTid)
ORDER BY t2.GDatoTid DESC
Avatar billede Superstes Novice
13. april 2012 - 09:27 #2
Det er ikke utænkeligt.

Kan du prøve at sætte det ind i en form for loop, så tabel1 bliver løbet igennem, og resultaterne vist?
Avatar billede Superstes Novice
13. april 2012 - 09:44 #3
Måske jeg skal prøve at forklare yderligere, hvad det er jeg ønsker.

tabel1 indeholder f.eks. følgende records:

CPR      ;    UdatoTid    ;  Rek1
0101010110;22-03-2012 07:19 ; TTT
0101010110;22-03-2012 13:12 ; TTT
0101010110;23-03-2012 01:35 ; XXX
0101010110;22-03-2012 10:00 ; XXX
0202020220;23-03-2012 09:30 ; PPP

tabel2 indeholder så f.eks.
CPR      ;    GdatoTid    ;  Rek2 ;Niveau
0101010110;22-03-2012 06:00 ; TTT  ;5,0
0101010110;22-03-2012 22:00 ; ZZZ  ;6,0
0101010110;23-03-2012 07:00 ; XXX  :8,2
0202020220;05-03-2012 08:30 ; EEE  :6,1

Resultatsettet skal så gerne være
CPR      ; Niveau ;    UdatoTid    ;    GdatoTid    ;Rek1;Rek2
0101010110;5,0    ;22-03-2012 07:19 ;22-03-2012 06:00 ;TTT ;TTT
0101010110;5,0    ;22-03-2012 13:12 ;22-03-2012 06:00 ;TTT ;TTT
0101010110;6,0    ;23-03-2012 01:35 ;22-03-2012 22:00 ;XXX ;ZZZ
0101010110;8,2    ;22-03-2012 10:00 ;23-03-2012 07:00 ;XXX ;XXX
0202020220;6,1    ;23-03-2012 09:30 ;05-03-2012 08:30 ;PPP ;EEE
Avatar billede Superstes Novice
17. april 2012 - 13:01 #4
Jeg kan ikke få det til at give et resultat. Hjælp?
Avatar billede mireigi Novice
20. april 2012 - 15:17 #5
SELECT TOP (1) t1.CPR, t2.Niveau, t1.UDatoTid, t2.GDatoTid, t1.Rek1, t2.Rek2
FROM Tabel1 AS t1 INNER JOIN Tabel2 AS t2 ON t1.CPR = t2.CPR
WHERE (t2.GDatoTid < t1.UDatoTid)
ORDER BY t1.CPR, t2.Niveau, t1.UDatoTid, t2.GDatoTid


Det burde kunne løse det for dig. Ellers må du se om andre kan hjælpe, for jeg kan ikke lige se andre løsninger.
Avatar billede Superstes Novice
25. april 2012 - 08:33 #6
Hej.

Jeg tror dig skam - men jeg er bare asp-dum nok til ikke at kunne få et loop e.l. til at løbe tabel1 igennem og vise et recordset med de ønskede resultater.

Kan du sætte denne sidste krølle på?
Avatar billede mireigi Novice
25. april 2012 - 09:03 #7
Det her skulle kunne gøre det for dig.
Du skal selv indsætte din connection string.

<%
  Dim adoConn, rsCommon, strSQL

  Set adoConn = Server.CreateObject("ADODB.Connection")
  adoConn.ConnectionString = ""

  Set rsCommon = Server.CreateObject("ADODB.RecordSet")
  strSQL = "" & _
  "SELECT TOP t1.CPR, t2.Niveau, t1.UDatoTid, t2.GDatoTid, t1.Rek1, t2.Rek2 " & _
  "FROM Tabel1 AS t1 INNER JOIN Tabel2 AS t2 ON t1.CPR = t2.CPR " & _
  "WHERE (t2.GDatoTid < t1.UDatoTid) " & _
  "ORDER BY t1.CPR, t2.Niveau, t1.UDatoTid, t2.GDatoTid;"
  rsCommon.Open strSQL, adoConn
  If NOT rsCommon.EOF Then
      Response.Write("<table>")
        Response.Write("<tr>")
            Response.Write("<td>CPR</td>")
            Response.Write("<td>UDatoTid</td>")
            Response.Write("<td>GDatoTid</td>")
            Response.Write("<td>Rek1</td>")
            Response.Write("<td>Rek2</td>")
        Response.Write("</tr>")
      Do While NOT rsCommon.EOF
        Response.Write("<tr>")
            Response.Write("<td>" & rsCommon("CPR") & "</td>")
            Response.Write("<td>" & rsCommon("UDatoTid") & "</td>")
            Response.Write("<td>" & rsCommon("GDatoTid") & "</td>")
            Response.Write("<td>" & rsCommon("Rek1") & "</td>")
            Response.Write("<td>" & rsCommon("Rek2") & "</td>")
        Response.Write("</tr>")
        rsCommon.MoveNext
      Loop
      Response.Write("</table>")
  End If
  rsCommon.Close
  Set rsCommon = Nothing
  adoConn.Close
  Set adoConn = Nothing
%>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester