Avatar billede madiedk Nybegynder
07. februar 2008 - 10:42 Der er 14 kommentarer og
1 løsning

Sql sætning

Hej

jeg har en tabel med 4 kolonner:
AFD, DATO, BRUGER, OMKID

hvordan skal sql forspørgelsen se ud hvis jeg kun vil have den største dato for hver afd og omkid.
altså hvis der står følgende i tabellen

56, 07-02-2008 10:09:52, per, 6
56, 07-02-2008 10:10:53, per, 6
56, 07-02-2008 10:11:54, per, 7

så skal forspørgelsen kun returnerer

56, 07-02-2008 10:10:53, per, 6
56, 07-02-2008 10:11:54, per, 7

da den som sagt kun skal returnere den største dato for hver afd og omkid
Avatar billede nielle Nybegynder
07. februar 2008 - 10:51 #1
Sådan?

SELECT afd, max(dato), bruger, omkid GROUP BY dato
Avatar billede nielle Nybegynder
07. februar 2008 - 10:52 #2
SELECT afd, max(dato), bruger, omkid FROM dinTabel GROUP BY afd, omkid
Avatar billede madiedk Nybegynder
07. februar 2008 - 11:08 #3
den kommer med fejl og skriver:
du har forsøgt at køre en forespørgsel der ikke medtager det angivne udtryk "bruger" som en del ad en aggregatfunktion

her er forspørgslen



historik.Open "SELECT historik.afd, max(historik.dato), historik.bruger, historik.omkid, historik.fraværdi FROM historik WHERE (((historik.afd)=" & afd & ")) group by historik.afd, historik.omkid", omkcon, adOpenStatic
Avatar billede pgroen Nybegynder
07. februar 2008 - 11:14 #4
Du skal have historik.bruger og historik.fraværdi med i din 'GROUP BY'

- Eller du skal have dem med som aggregerede værdier, fx MAX(historik.bruger) eller AVG(historik.fraværdi)
Avatar billede madiedk Nybegynder
07. februar 2008 - 11:19 #5
nu kører den, men den returnere alle poster stadig
Avatar billede madiedk Nybegynder
07. februar 2008 - 11:29 #6
hvis jeg fjerne alle værdi i fraværdi kolonnen i tabellen, så ser det ud til at den virker, hvordan løser jeg det, så de stadig kan stå der
Avatar billede pgroen Nybegynder
07. februar 2008 - 12:06 #7
Hvis du 'kun vil have den største dato for hver afd og omkid', hvilken fraværdi vil du så have?

den største?
eller gennemsnittet?

du skal med andre ord tage stilling til hvordan du vil have grupperet dine data; du kan ikke samtidig bede om alle fraværdier OG gruppere på afd/omkid...
Avatar billede madiedk Nybegynder
07. februar 2008 - 12:14 #8
fraværdi skal bare være den som der står i linien med den største dato. hvis det giver meningen, ellers er det også ligegyldige med fraværdi, den skal jeg faktisk ikke bruge i den forespørgsel alligevel, så hvis det bliver for besværligt så bare fjern den
Avatar billede madiedk Nybegynder
07. februar 2008 - 12:15 #9
ahh det har nok forvirret at jeg ikke har skrevet kolonnen fraværdi i mit spørgsmål, da jeg tilføjede den efter spørgsmålet. men bare fjern den fra forespørgslen.
Avatar billede madiedk Nybegynder
07. februar 2008 - 12:21 #10
okay, nu har jeg fjernet fraværdi, men der er stadig et problem med bruger, fordi hvis der er 2 forskellige brugere så kommer der en max værdi med for hver bruger, hvis I forstår? den skal kun komme med den bruger der har den største dato værdi for afdeling og ommkid
Avatar billede powerpunk Nybegynder
07. februar 2008 - 13:39 #11
noget i retning af:

SELECT afd, dato, bruger, omkid FROM [Table] t1 GROUP BY afd, dato, bruger, omkid
HAVING dato =
(
  SELECT MAX(dato) FROM [Table] t2 WHERE t2.afd = t1.afd AND t2.omkid = t1.omkid
)
Avatar billede madiedk Nybegynder
07. februar 2008 - 14:01 #12
hvorfor er der en tabel 2 jeg har jo kun 1 tabel
Avatar billede powerpunk Nybegynder
07. februar 2008 - 14:30 #13
Ja det kunne jeg måske have forklaret bedre. Det er samme tabel. t1 og t2 er aliaser for den samme tabel. Hvis ikke de er der giver WHERE udtrykket ikke mening. Jeg kunne også have været flinkere og sat AS på så hvis din tabel eksempelvis hedder 'MyTable' ville det se sådan her ud:

SELECT afd, dato, bruger, omkid FROM MyTable AS t1 GROUP BY afd, dato, bruger, omkid
HAVING dato =
(
  SELECT MAX(dato) FROM MyTable AS t2 WHERE t2.afd = t1.afd AND t2.omkid = t1.omkid
)

Det den reelt gør er at lave en subquery for hver record baseret på data i recorden.
Altså noget i retning af.

Vælg record hvor dato er lig (største dato i samme tabel hvor 'afd' og 'omkid' er lig 'afd' og 'omkid' i record)

jeg håber det gav mening :-)
Avatar billede madiedk Nybegynder
07. februar 2008 - 15:17 #14
ja den virker i hvertfald indtil videre, har ikke fået gennemtestet den, men det giver meget god mening det du skriver, så smid et svar så der point. og mange tak for hjælpen og tiden.
også tak til de andre
Avatar billede powerpunk Nybegynder
07. februar 2008 - 15:39 #15
Velbekomme :-)

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