Avatar billede kasperh Nybegynder
12. november 2003 - 04:41 Der er 13 kommentarer og
1 løsning

GROUP BY og DATE_SUB

Hvorfor fejler den på denne her?
SELECT * FROM Log
GROUP BY LogSessionID
WHERE LogTimestamp>DATE_SUB(NOW(), INTERVAL 5 MINUTE);
ORDER BY LogTimestamp DESC

Jeg vil gerne have de sidste 5 minutters logrecords grupperet op på sessionid, så jeg får den nyeste record på hver sessionid.
Avatar billede clausjul Nybegynder
12. november 2003 - 06:58 #1
Måske ligger GROUP BY forkert... Prøv med denne:
SELECT * FROM Log
WHERE LogTimestamp>DATE_SUB(NOW(), INTERVAL 5 MINUTE);
GROUP BY LogSessionID
ORDER BY LogTimestamp DESC
Avatar billede nicklasb Nybegynder
12. november 2003 - 07:00 #2
ja, og så skal ;'en væk.. så det bliver

SELECT * FROM Log
WHERE LogTimestamp>DATE_SUB(NOW(), INTERVAL 5 MINUTE)
GROUP BY LogSessionID
ORDER BY LogTimestamp DESC
Avatar billede nicklasb Nybegynder
12. november 2003 - 07:02 #3
og så skal din > vel også vendes om så den bliver en < .. Du tester vel på gamle records og ikke poster der har tider frem i tiden eller hvordan (tænkte bare når du nu har skrevet LOG ..)
Avatar billede nicklasb Nybegynder
12. november 2003 - 07:05 #4
hov.. min fejl.. time timestamp skal selvfølgelig være størst.. Men hvorfor ikke bare tage et almindeligt timestamp og så minus det med 60*5 ??
Avatar billede kasperh Nybegynder
13. november 2003 - 18:21 #5
Men jeg får stadig ikke den nyeste records som jeg grupperer på?
Avatar billede nicklasb Nybegynder
13. november 2003 - 22:07 #6
SELECT MAX(LogTimestamp) FROM Log
WHERE LogTimestamp>DATE_SUB(NOW(), INTERVAL 5 MINUTE)
GROUP BY LogSessionID
ORDER BY LogTimestamp DESC

evt?
Avatar billede kasperh Nybegynder
14. november 2003 - 01:30 #7
Så får jeg den nyeste tid ja, men jeg vil gerne have hele rækken for den nyeste tid.
Avatar billede nicklasb Nybegynder
14. november 2003 - 07:36 #8
er det så ikke bare at skirve MAX(LogTimestamp), detandet, dugerne, vilgave FROM ...
Er ikke superekspert til MySQL.. Men tror desværre ikke der er andre løsninger på problemet, hvis ikke du skal til at have en meget længere query.. Så skal du ud at finde MAX-logtimestampet og så bag efter hente recorden ud fra dette.. Men lettere bare at skrive de forskellige, for du ved jo vel alligevel hvilke du skal bruge..

Men som sagt, ikke ekspert, så det kan saktens være der findes en "lige til" løsning..
Avatar billede kasperh Nybegynder
14. november 2003 - 16:24 #9
Kan stadig ikke få det til at virke. :]
Her er min fulde sql sætning.

SELECT MAX(l.LogTimestamp),UNIX_TIMESTAMP(l.LogTimestamp) as Tid,c.CustomerFirstname,c.CustomerLastname
FROM Log l
LEFT JOIN Customer c ON c.CustomerID = l.CustomerID
WHERE l.LogTimestamp>DATE_SUB(NOW(), INTERVAL 5 MINUTE)
GROUP BY l.LogSessionID
ORDER BY l.LogTimestamp DESC
Avatar billede kasperh Nybegynder
17. november 2003 - 22:00 #10
Nicklas?
Avatar billede kasperh Nybegynder
21. november 2003 - 13:27 #11
Juhu ?
Avatar billede kasperh Nybegynder
27. november 2003 - 06:36 #12
Æv?
Avatar billede kasperh Nybegynder
08. december 2003 - 09:28 #13
Hmm.. Blev det mon for svært?
Jeg lukker.
Avatar billede bigo Nybegynder
06. september 2004 - 13:39 #14
Lang tid siden, men jeg havde et lignende problem. Har nu fundet løsningen og ville bare dele den med andre:


SELECT MAX(l.LogTimestamp),UNIX_TIMESTAMP(l.LogTimestamp) as Tid,c.CustomerFirstname,c.CustomerLastname, l.LogTimestamp
FROM Log l
LEFT JOIN Customer c ON c.CustomerID = l.CustomerID
WHERE DATE_SUB(UNIXTIME(l.LogTimestamp), INTERVAL 5 MINUTE)
>
DATE_SUB(NOW(), INTERVAL 5 MINUTE)
GROUP BY l.LogSessionID
ORDER BY l.LogTimestamp DESC
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
Computerworld tilbyder specialiserede kurser i database-management

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