Avatar billede htx98i17 Professor
07. august 2011 - 10:02 Der er 12 kommentarer og
1 løsning

GROUP og ORDER BY fungere ikke som den skal

Jeg har 3 ordrer fra samme kunde i en tabel. Kunden har brugt samme telefonnummer ved hver ordre, men adressen er 3 forskellige.

Jeg vil gerne i et udtræk kun have den nyeste adresse trukket ud.

Jeg troede følgende ville kunne gøre det, men det fungerer slet ikke. Den tager altid og lige meget hvad, den første ordres adresse ud.

SELECT * FROM tblordre WHERE telefon ='88888888' GROUP BY telefon ORDER BY id DESC

Jeg har også forsøgt at ORDER BY tid DESC.

Lige meget hvad, så henter den altid posten med den ældste adresse.

Hvordan er den rigtige metode?
Avatar billede erikjacobsen Ekspert
07. august 2011 - 10:12 #1
Hvordan ser du hvad der er den nyeste adresse?
Avatar billede htx98i17 Professor
07. august 2011 - 10:17 #2
Ved at sortere på ORDER BY id DESC ? men det er så forkert kan jeg regne ud...
Avatar billede erikjacobsen Ekspert
07. august 2011 - 10:21 #3
Så højeste id for et telefonnummer er den nyeste adresse. Det kan en GROUP BY ikke i sig selv klare. ORDER BY har heller ikke noget at sortere, da der kun er een række, med en "tilfældig" adresse - som kan være den første.

Men forstår jeg rigtigt, så giver

SELECT MAX(id) FROM tblordre WHERE telefon ='88888888' GROUP BY telefon

id-en på den nyeste adresse?
Avatar billede htx98i17 Professor
07. august 2011 - 10:27 #4
Den kommer så til at se således ud:

SELECT *,MAX(id) FROM tblordre WHERE telefon = '88888888' GROUP BY telefon

,da jeg skal bruge alle informationerne.

Men den tager faktisk også den ældste adresse... :(
Avatar billede htx98i17 Professor
07. august 2011 - 10:32 #5
Jeg kan se, at MAX() vist ikke kan bruge sammen med stjernen... Hvis jeg udelader stjernen finden den rigtig nok den nyeste adresse. Men jeg skal jo også bruge de øvrige informationer.

Og hvis jeg skriver SELECT adresse,postnr,MAX(id)... så finder den kun igen den ældste adresse...
Avatar billede htx98i17 Professor
07. august 2011 - 10:34 #6
Rettelse: Den finder rigtig nok det nyeste ID, men uden de øvrige felter som jeg også skal bruge.
Avatar billede erikjacobsen Ekspert
07. august 2011 - 10:53 #7
Det er kun id-en på den nyeste adresse jeg forespørger med mit forslag. Hvad skal du bruge ud over id-en: kundens navn, adresse, ... ? Ikke andet?
Avatar billede htx98i17 Professor
07. august 2011 - 10:59 #8
Ok
jeg skal bruge firma, navn, adresse, land, postnr, city, telefon
Avatar billede arne_v Ekspert
07. august 2011 - 17:53 #9
SELECT * FROM tblordre t1 WHERE telefon ='88888888' AND id=(SELECT MAX(id) FROM tblorder t2 WHERE t2.telefon=t1.telefon)
Avatar billede erikjacobsen Ekspert
07. august 2011 - 20:59 #10
Det burde være nok med:

SELECT * FROM tblordre WHERE id=(SELECT MAX(id) FROM tblorder WHERE telefon ='88888888')
Avatar billede htx98i17 Professor
07. august 2011 - 21:06 #11
Perfekt arne, lig et svar
Avatar billede arne_v Ekspert
07. august 2011 - 21:49 #12
erik>

ja
Avatar billede arne_v Ekspert
07. august 2011 - 21:49 #13
svar
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