Avatar billede hmau Nybegynder
18. juni 2001 - 12:23 Der er 21 kommentarer og
1 løsning

SQL udtræk

Jeg har en tabel indeholdende 3 felter:
Dato (date)
HenvisningsID (int)
Antal (int)

ingen af felterne er unikke.

Mit problem er at jeg skal hente de fem senest oprettede records hvor antal er større end nul hvor hvert henvisningsID kun må forekomme 1 gang.

Hvordan laves SQL sætningen?
Avatar billede olberd Nybegynder
18. juni 2001 - 12:32 #1
Hvad mener du med at hvert henvisningsID kun må komme en gang?
Avatar billede olberd Nybegynder
18. juni 2001 - 12:35 #2
Set Conn = Server.CreateObject(\"ADODB.connection\")   
Conn.Open \"noget\"
Set rs = Server.CreateObject(\"ADODB.RecordSet\")

RS.maxrecords = 5
rs.Open \"SELECT * FROM tabel WHERE antal > 0 ORDER BY date DESC\"
Avatar billede olberd Nybegynder
18. juni 2001 - 12:36 #3
Nogle gang så skriver den ikke teksten hvis man har valgt svar :-(

Irriterende..!
Avatar billede hmau Nybegynder
18. juni 2001 - 12:37 #4
jeg mener at to ens henvisningsID ikke må forekomme i udtrækket.

Altså DISTINCT på HenvisningsID
Avatar billede olberd Nybegynder
18. juni 2001 - 12:40 #5
SELECT henvisningsID, Max(dato) AS datoen
WHERE antal > 0
GROUP BY henvisningsID
ORDER BY Max(dato) DESC
Avatar billede jakobandersen Nybegynder
18. juni 2001 - 12:41 #6
Hvis du bruger Access eller MS SQL kan du lave noget som dette:

SELECT DISTINCT TOP 5 HenvisningsID, * FROM tabel WHERE Antal > 0
Avatar billede jakobandersen Nybegynder
18. juni 2001 - 12:42 #7
Hov der røg lige en order by fra der sådan her:

SELECT DISTINCT TOP 5 HenvisningsID, * FROM tabel WHERE Antal > 0 ORDER BY Dato
Avatar billede olberd Nybegynder
18. juni 2001 - 12:45 #8
Jeg har aldrig rigtigt forstået DISTINCT og DISTINCTROW.
Kan du forklare dem moonduck??
Avatar billede jakobandersen Nybegynder
18. juni 2001 - 12:50 #9
DISTINCT gør at der kun udtrækkes unikke af feltet...

I en tabel som denne:

id navn
1    bo
2    bo
3    jakob
4    trine
5    jakob

vil

SELECT DISTINCT navn FROM tabel

returnere

bo
jakob
trine

DISTINCT ROW kigger ikke bare på et felt men på helle rækken dvs.  den returnerer unikke rækker dvs. at i ovenstående eksempel vil vi få listet alle vores data da de har forskellige ID numre..

Avatar billede olberd Nybegynder
18. juni 2001 - 12:56 #10
SELECT DISTINCT TOP 5 HenvisningsID, * FROM tabel WHERE Antal > 0 ORDER BY Dato

Hvis der er:
HenvID  Dato  Antal
1  22-03-00  3
1  21-03-00  5

Hvordan bestemmer den så hvilken af posterne den viser??
Avatar billede olberd Nybegynder
18. juni 2001 - 12:57 #11
Dit svar skulle forresten være:
SELECT DISTINCT TOP 5 HenvisningsID, * FROM tabel WHERE Antal > 0 ORDER BY Dato DESC

Da den ellers ville vise de ældste
Avatar billede jakobandersen Nybegynder
18. juni 2001 - 13:01 #12
1 22-03-00 3
1 21-03-00 5

Vil med DISTINCT henvisningsId vise den post dewn først møder i sorterings rækkefølgen dvs. den nyeste med din ORDER by Dato Desc altså

1 22-03-00 3
Avatar billede hmau Nybegynder
18. juni 2001 - 13:04 #13
Jeg havde bare problemer med at få distinct og top til at virke sammen, havde byttet rundt på dem. ;)

Tak for hjælpen.
Avatar billede hmau Nybegynder
18. juni 2001 - 13:19 #14
Hmmm.... det virker ikke alligevel
Avatar billede jakobandersen Nybegynder
18. juni 2001 - 13:20 #15
Hvad nu?
Avatar billede hmau Nybegynder
18. juni 2001 - 13:22 #16
jeg havde fået tilføjet en record der gjorde at ded henvisningsID der forekom 2. gang var nummer 6. Derfor kom den ikke frem på listen og jeg troede det virkede, gjorde det ikke :(
Avatar billede jakobandersen Nybegynder
18. juni 2001 - 13:23 #17
Det burde virke er du sikker på at du ikke roder rundt i noget..
Avatar billede hmau Nybegynder
18. juni 2001 - 13:26 #18
sql=\"SELECT DISTINCT TOP 50 henvisningsID, dato, antal FROM tabel WHERE antal> 0 ORDER BY dato DESC\"

Den kører DISTINCT på alle tre, dvs. 2 records skal være ens på alle tre felter før der bliver sorterent nogen fra. Hvis jeg fjerner dato og antal virker det...
Avatar billede hmau Nybegynder
18. juni 2001 - 13:28 #19
Før flg. recordset:

4557 14-06-2001 23:59:26 70000
4702 14-06-2001 22:51:52 50000
4286 14-06-2001 20:14:47 35000
4491 12-06-2001 11:45:42 50000
5088 11-06-2001 16:04:21 10000
5088 11-06-2001 14:47:16 10000
Avatar billede jakobandersen Nybegynder
18. juni 2001 - 13:31 #20
Er du sikker på at der er nok data der lever op til dine kriterier?
Avatar billede hmau Nybegynder
18. juni 2001 - 14:03 #21
det har ingen indflydelse.
Avatar billede jakobandersen Nybegynder
18. juni 2001 - 14:24 #22
Okay, det er fordi at MS SQL tolker DISTINCT anderledes end de DBMSer jeg er vant til at arbejde med, MSSQL tolker dem sådan her:

\"Specifies that only unique rows can appear in the result set. Null values are considered equal for the purposes of the DISTINCT keyword.\"

Dvs. at en distinct i MSSQL faktisk er en DISTINCTROW

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
Kurser inden for grundlæggende programmering

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