Avatar billede unknown_someone Juniormester
29. december 2004 - 16:08 Der er 8 kommentarer og
1 løsning

distinct samt order by

Jeg er gået helt i stå på en umiddelbart let sql... jeg skal have valgt nogle poster ud, et felt distinct og så skal der orders by. Her er mit eksempel men det virker ikke - nogle gode forslag?

SELECT arrival, price, distinct(new_obj_id) FROM holiday.bookings_summer boo, holiday.OBJECT OBJECT WHERE boo.kat_nr = OBJECT.object_id AND (valength = '1*uge' OR valength = '7*nætter') AND boo.country = 'Italien' GROUP BY new_obj_id ORDER BY booking_id desc
Avatar billede arne_v Ekspert
29. december 2004 - 16:23 #1
Og hvad er problemet ? Får du en fejl eller forkerte data ?
Avatar billede unknown_someone Juniormester
29. december 2004 - 16:35 #2
med ovenstående får jeg fejlen "manglende udtryk" med henvisning til "distinct".

Hvis jeg undlader at udvælge arrival og price så der kun står distinct(new_obj_id) melder den fejlen "ikke et SELECTed udtryk" med henvisning til "booking_id" i min order by.
Avatar billede Slettet bruger
29. december 2004 - 17:41 #3
Distinct virker på alle felter i select, så prøv:
SELECT distinct arrival, price, new_obj_id FROM ....
Avatar billede pgroen Nybegynder
30. december 2004 - 08:28 #4
Hvad er formålet med din GROUP BY clause?
- Det giver ikke rigtig mening at gruppere på en DISTINCT værdi,
og du skal have alle dine felter med i GROUP BY'en, eller også skal
du summere på dem; fx. noget i stil med:

SELECT max(arrival), sum(price), new_obj_id FROM holiday.bookings_summer boo, holiday.OBJECT OBJECT WHERE boo.kat_nr = OBJECT.object_id AND (valength = '1*uge' OR valength = '7*nætter') AND boo.country = 'Italien' GROUP BY new_obj_id, booking_id  ORDER BY booking_id desc
Avatar billede unknown_someone Juniormester
30. december 2004 - 10:38 #5
godt - så lad mig sige det på en anden måde hvis det kan hjælpe på at forstå det resultat jeg gerne vil have.

Jeg skal have alle data ud, hvor min WHERE-statement bliver opfyldt MEN jeg vil kun have unikke new_obj_id ud. Da rækkerne indeholde mange ens new_obj_id men hvor arrival og price er hver eneste tilfælde er forskellige kan jeg ikke køre distinct på alle 3 fordi jeg så vil få dublerende new_obj_id ud.
Avatar billede pgroen Nybegynder
30. december 2004 - 11:13 #6
Ok, du siger at arrival og price er forskellige, men at du kun vil have unikke new_obj_id ud. Hvilke af de forskellige arrival og price vil du så have ud pr. new_obj_id? - den højeste, den laveste, gennemsnittet, eller noget helt fjerde
Avatar billede unknown_someone Juniormester
30. december 2004 - 14:39 #7
en helt fjerde - den sidste nye ud fra feltet arrival ud fra booking_id
Avatar billede pgroen Nybegynder
31. december 2004 - 06:00 #8
OK, så kunne løsningen være noget i stil med:

SELECT arrival, price, new_obj_id FROM holiday.bookings_summer boo, holiday.OBJECT obj1 WHERE boo.kat_nr = obj1.object_id AND (valength = '1*uge' OR valength = '7*nætter') AND boo.country = 'Italien' and booking_id = (select max(booking_id) from
holiday.object obj2 where obj1.new_obj_id = obj2.new_obj_id)
Avatar billede qualjyn Nybegynder
13. juli 2005 - 08:15 #9
hvis det virker, så få givet pgroen nogle point, eller uddyb noget mere :)
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