26. september 2007 - 13:22Der er
3 kommentarer og 1 løsning
distinct på kollum ?
hej eksperten, som tidligere nævnt er jeg newb til sql. jeg har det her:
SELECT *
FROM innoteck.PeopleCounterLog b
WHERE NOT EXISTS (
SELECT DISTINCT AccessID FROM (
SELECT DISTINCT AccessID FROM innoteck.PeopleCounterLog
WHERE logtime >= DATEADD(day, -2, GetDate())
) a
WHERE a.AccessID = b.AccessID
)
ORDER BY AccessID
Det jeg mangler er at den stadig viser alle kollums, men at den kun viser EN pr. accessID, det skal være den seneste Logtime kollum. det kan fx stå: 12-12-2007 12:30:45 (i logtime)
som sagt. den skal vist KUN EN pr accessID og det skal være den seneste Logtime som er kommet.
Når du vælger Select *, får du alle kolonner i tabellen innoteck.PeopleCounterLog. Hvis du kun vil have nogle bestemte kolonner, skal du angive de kolonner du onsker med f.eks.: SELECT AccessID, logtime FROM ....
Hvis du vil have den seneste logtime, skal du først finde de aktuelle AccessID, og derefter søge senste logtime for de aktuelle AccessID. Hvis jeg forstår dig rigtig, ønsker du at vise den seneste logtime, for de AccessID som ikke har data som er nyere end 2 dage.
Jeg ved ikke hvor stor din innoteck.PeopleCounterLog er, eller hvordan den er indekseret, så foresåørgselen kan muligvis være tung. Noget i retning af:
SELECT AccessID, Max(logtime) FROM innoteck.PeopleCounterLog b WHERE NOT EXISTS ( SELECT AccessID FROM ( SELECT DISTINCT AccessID FROM innoteck.PeopleCounterLog WHERE logtime >= DATEADD(day, -2, GetDate()) ) a WHERE a.AccessID = b.AccessID ) GROUP BY AccessID ORDER BY AccessID
Jeg har fjernet distinct fra den næst inderste Select ('SELECT AccessID FROM ('), da der er en distinct i den inderste Select.
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.