Avatar billede madiedk Nybegynder
21. november 2008 - 10:51 Der er 7 kommentarer og
2 løsninger

forespørgsel group by?

hej

jeg har en forespørgsel:

SELECT RET.AFD, Min(RET.FORMUE)
FROM INV.RET RET
WHERE (RET.DATO>={ts '2008-01-01 00:00:00'})
GROUP BY RET.AFD

problemet er at jeg gerne vil have RET.DATO med i SELECT, så  jeg kan se hvilken dato RET.FORMUE var mindst. hvordan?

hvis jeg bare srkiver RET.DATO med i select og group by SÅ kommer den for ALLE datoer
Avatar billede fsconsult.dk Nybegynder
21. november 2008 - 11:13 #1
ca

SELECT RET.AFD, Min(RET.FORMUE),
  (select max(R2.DATO)
  from INV.RET R2
  where (R2.DATO>={ts '2008-01-01 00:00:00'})
  AND (R2.FORMUE = RET.FORMUE)
  )
FROM INV.RET RET
WHERE (RET.DATO>={ts '2008-01-01 00:00:00'})
GROUP BY RET.AFD
Avatar billede pgroen Nybegynder
21. november 2008 - 11:19 #2
Noget i stil med

SELECT ret.afd, ret.formue, ret.dato
  FROM ret
WHERE (ret.afd, ret.formue) IN (SELECT ret.afd, min(ret.formue
                                  FROM ret
                                GROUP by ret.afd)

?
Avatar billede pgroen Nybegynder
21. november 2008 - 11:20 #3
Hov, mangler en parentes:

SELECT ret.afd, ret.formue, ret.dato
  FROM ret
WHERE (ret.afd, ret.formue) IN (SELECT ret.afd, min(ret.formue)
                                  FROM ret
                                GROUP by ret.afd)
Avatar billede fsconsult.dk Nybegynder
21. november 2008 - 11:34 #4
virker ikke helt perfekt hvis der er to med samme formue ;)
Avatar billede madiedk Nybegynder
21. november 2008 - 12:06 #5
tak men....
fsconsult: Den siger at det ikke er et group by udtryk og pgroen: Der kommer den ikke ud med alle afd men nogle kommer den ud med flere gange
Avatar billede madiedk Nybegynder
21. november 2008 - 12:18 #6
den er den nu med pgroen's forslag jeg skulle bare tilføje  (RET.DATO>={ts '2008-01-01 00:00:00'}) i begge select sætninger. tak til begge. men pgroen smid et svar
Avatar billede fsconsult.dk Nybegynder
21. november 2008 - 12:19 #7
Prøv med (normalt må man ikke have ikke-aggregerede felter i select, som ikke er i group by):

SELECT RET.AFD, Min(RET.FORMUE),
  (select max(R2.DATO)
  from INV.RET R2
  where (R2.DATO>={ts '2008-01-01 00:00:00'})
  AND (R2.FORMUE = RET.FORMUE)
  )
FROM INV.RET RET
WHERE (RET.DATO>={ts '2008-01-01 00:00:00'})
GROUP BY RET.AFD, 3
Avatar billede fsconsult.dk Nybegynder
21. november 2008 - 12:20 #8
madiedk> du skal være opmærksom på, at pgroen's løsning giver flere resultater, hvis der er flere RET, som opfylder MIN(formue)
Avatar billede pgroen Nybegynder
21. november 2008 - 12:50 #9
Svar...

Det er rigtigt, at du får flere resultater ved samme min(formue), men det er vel egentlig også hensigten ?
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