04. juni 2005 - 14:57Der er
5 kommentarer og 1 løsning
MySQL problem med GROUP BY og min()
Jeg benytter surftown.dk og ved kun at det drejer sig om MySQL 4.
Jeg ønsker at udvælge IDrecord fra den entry i databasen med ældst dato.
Tabel:
Contenttracking ======================================= ID IDcontent IDrecord time --------------------------------------- 1 329 17 2005-05-29 13:46:49 2 329 24 2005-05-29 20:33:57 =======================================
Query:
SELECT IDcontent, IDrecord, min( time ) AS time FROM contenttracking WHERE IDcontent = 329 GROUP BY IDcontent
Resultat på surftown:
======================================= IDcontent IDrecord time --------------------------------------- 329 24 2005-05-29 13:46:49 =======================================
Resultat på min egen testserver (MySQL 4.0.23):
======================================= IDcontent IDrecord time --------------------------------------- 329 17 2005-05-29 13:46:49 =======================================
På surftown vælger den altså den korrekte dato, men GROUP BY vælger IDrecord fra en anden entry. Hvad skal jeg gøre for at den vælger den værdi for IDrecord, der er knyttet til min(time)?
Det er, som du selv ser, ganske tilfældigt hvilken der bliver valgt, når du bruger et felt, der ikke er med i listen angivet ved GROUP BY. Det er også stort set kun MySql der tillader det - det ville være mere meningsfyldt at give en fejlmeddelelse.
Kommer id-erne i samme rækkefølge som tidspunktet, så kan du skrive: min(IDRecord) Ellers skal du i gang med noget andet.
Hmm... virker mail-abonnement ikke altid. Jeg beklager meget, at jeg ikke har set jeres kommentarer.
Jeg kørte en SELECT VERSION() og fik: 4.0.24-standard-log
Mht. hmortensens kommentar:
Problemet er, at tabellen contenttracking registrerer ændringer for flere forskellige IDcontent. Jeg vil gerne lave et join med en anden tabel på netop IDcontent, således at resultatet indeholder de forskellige IDcontent knyttet til den dato, hvor de blev oprettet.
Jeg troede umiddelbart, at det kunne løses ved oprettelse af en TEMPORARY TABLE, men der får jeg samme problem. Jeg tror umiddelbart, at det bliver nødvendigt med en ekstra kolonne til markering af første entry for hver IDcontent.
Eftersom der ikke er nogen løsning til problemet, lukker jeg spørgsmålet.
Synes godt om
Ny brugerNybegynder
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.