JD wrote:
>>Gæt:
>>Kan problemet ligge i DESC LIMIT 20 ???
>>
>>Da vi jo ikke kendet ldate værdierne kan det være vanskeligt at se om de
>>korrekte 20 data af id_host kommer med.
>
>
> Jeg har spurgt i den internationale database også
Jeg synes at det fremgår ret tydeligt af
1152562869.577460.276510@m79g2000cwm.googlegroups.com
hvad problemet er. Nu har du netop undladt at bringe hele tabellen,
hvilket betyder at folkene her i dk.edb.databaser (som nok ikke er helt
så skrappe som i comp.databases) ikke har indset hvor mærkelig din
forespørgsel egentlig er.
Din oprindelige forespøgsel var:
SELECT id_host FROM child ORDER BY ldate DESC LIMIT 20
Her er et eksempel:
id stamp
A 10
A 20
A 30
A 40
B 5
SELECT id FROM mintabelovenfor
ORDER BY stamp DESC LIMIT 3
Er det så underligt at resultatet nødvendigvis er
id stamp
A 20
A 30
A 40
Det er tydeligt at du ønsker en række for hvert id med den højeste værdi
fra stamp, men det er klart ikke det, du beder om.
Så kommer så dine nye forespørgsler, som egentlig er endnu mere underlige:
> og der har jeg fundet fram
> til, at hvis jeg bruger følgende SELECT, så virker det uden problemer.
> Jeg har kan ikke se forskellen?
>
> Virker:
> select id_host, ldate from test
> group by id_host
> order by max(ldate) desc
Den forespørgsel er mere tricky, end den ser ud til, for du beder om at
få en række pr. id_host, men disse id'er skal dernæst sorteres efter
hvilken der optræder med den højeste ldate-værdi. Men når du også tager
ldate med blandt de felter, som skal med i resultatet, falder det i mine
øjne helt fra hinanden. Hvis der er flere ldate-værdier, er det
tilfældigt hvilken en, mysql vælger for dig. Der burde stå
select id_host, max(ldate) from test
group by id_host
order by max(ldate) desc
Her er et eksempel:
id_host ldate
1 10
1 20
1 30
2 1
3 1
Her er tre eksempler på mulige resultater. Så vidt jeg kan se, er de
alle gyldige svar på din version af forespørgslen:
id_host ldate
1 10
2 1
3 1
id_host ldate
1 20
2 1
3 1
id_host ldate
1 30
2 1
3 1
Jeg tror at det er et rent lykketræf at resultatet tilsyneladende passer.
> Virker ikke:
> select id_host, max(ldate) from test
> group by id_host
> order by ldate desc
Det er klart. Du kan ikke sortere efter et felt, som ikke optræder i
GROUP BY.
Nælste gang er det nok en god idé at bringe alle de felter, problemet
gælder
Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at
http://michael.zedeler.dk/