webForumDet fria alternativet

Hämta de 5 datumen som är närmast dagens datum.

Databaser & SQL

19 svar · 404 visningar · startad av mattiasnordin

Medlem sedan maj 20012 080 inlägg
Frågan#1

Hmmm... Hur får jag ut 5 poster som är närmast dagens datum ur min access 2003 databas?

Datumen är i datumformat.

Medlem sedan juni 200032 967 inlägg
#2
SELECT TOP 5 DateDiff('d', [i]datumfält[/i], now()), * FROM tbl ORDER BY 1

Du kan köra på minuter eller sekunder också om du vill det, det är bara att ändra i DateDiff.

mvh

Medlem sedan maj 20012 080 inlägg
#3

@nders, du är verkligen överallt. *ler*

Ska testa. Tack. Tänkte inte på datediff.

Medlem sedan maj 20012 080 inlägg
#4

Hmmm.... om vi vill krångla till det då.

Låt oss säga att jag vill ha med de 2 senaste raderna också. Dvs de 2 som nyligen har passerats.

Medlem sedan juni 200032 967 inlägg
#5

hmm... Jag hade nog gjort det med en UNION.

SELECT TOP 2 0, * FROM tbl WHERE [i]datumfält[/i] < now() ORDER BY [i]datumfält[/i] DESC
UNION ALL
SELECT TOP 5 DateDiff('d', [i]datumfält[/i], now()), * FROM tbl ORDER BY 1

@nders, du är verkligen överallt. *ler*

A man's gotta do what a man's gotta do. ;)

mvh

Medlem sedan nov. 20017 144 inlägg
#6

Kan man inte använda BETWEEN istället, så slippar man göra en UNION?

Medlem sedan juni 200032 967 inlägg
#7

hmm... Det går säkert. Men BETWEEN vadå? :)

Medlem sedan maj 20012 080 inlägg
#8

Otroligt sexigt. Fungerar klockrent.
Men det är över min kompetens att förstå hur det fungerar... hi hi...

Bussigt :)

Medlem sedan juni 200032 967 inlägg
#9

Men det är över min kompetens att förstå hur det fungerar

Hämta de två senaste posterna som har datum tidigare än nu
LÄGG IHOP
Hämta de fem poster med minst tidsskillnad från nu

;-)

Medlem sedan maj 20012 080 inlägg
#10

Men jag har ett problem... Sorry...

Sorteringen fungerar inte riktigt

	sql = " SELECT TOP 2 0, * FROM T_aktiviteter WHERE fran_datum < now() ORDER BY fran_datum DESC "
	sql = sql &" UNION ALL "
	sql = sql &" SELECT TOP 5 DateDiff('d', fran_datum, now()), * FROM T_aktiviteter ORDER BY 1 "

Returnerar

21 okt
20 okt
21 okt
20 okt
20 okt

19 okt
17 okt

Hmmm ????

Medlem sedan juni 200032 967 inlägg
#11

Det är inte så konstigt. Det är resultatet av en SQL-fråga, och under det resultatet av en annan. Sorteringen får du leka med själv. ;)

Medlem sedan maj 20012 080 inlägg
#12

Jag trodde att man skulle kunna göra

SELECT TOP 5 DateDiff('d', fran_datum, now()), * FROM T_aktiviteter ORDER BY fran_datum DESC

Men det vill sig inte. Data type mismatch in criteria expression.

Medlem sedan maj 20012 080 inlägg
#13

Ledsen @nders. Men jag förstår min fortfarande inte på hur man sorterar i frågan ovan. Kan du hjälpa mig ?

Medlem sedan juni 200032 967 inlägg
#14

Jag skulle nog ha provat så här:

	sql = "SELECT * FROM (SELECT TOP 2 0, * FROM T_aktiviteter WHERE fran_datum < now() ORDER BY fran_datum DESC "
	sql = sql &" UNION ALL "
	sql = sql &" SELECT TOP 5 DateDiff('d', fran_datum, now()), * FROM T_aktiviteter ORDER BY 1) ORDER BY fran_datum DESC"

Frågan som den är nu tillåter att det kommer dubbletter. Kommer en post med i resultatet från fråga ett, kan den komma med i resultatet från fråga 2. Om du vill undvika det, byt från UNION ALL till UNION.

mvh

Medlem sedan maj 20012 080 inlägg
#15

Ska prova lite senare. Tack. Svårt det där ;)

Medlem sedan maj 20012 080 inlägg
#16

Frågan som den är nu tillåter att det kommer dubbletter. Kommer en post med i resultatet från fråga ett, kan den komma med i resultatet från fråga 2. Om du vill undvika det, byt från UNION ALL till UNION.

Det blev bättre men jag har fortfarande dubletter, oavsätt hur jag använder UNION eller UNION ALL.

Ser nu ut så här:

21 okt a
21 okt a
20 okt b
20 okt b
20 okt c

19 okt d
17 okt e

Hilfe :)

Medlem sedan juni 200032 967 inlägg
#17

Har du inte flera poster för de datumen det blir dubletter då?

Medlem sedan maj 20012 080 inlägg
#18

Den 20 okt så är finns det en aktivitet som är bowling. Denna har jag en dublett på fastän det bara finns en bowlingaktivitet i databasen.

Det finns förövrig bara 6 poster ifyllda i databasen och frågan returnerar 7 st svar.

Medlem sedan juni 200032 967 inlägg
#19

Nu förstår jag. Det är nollan som ställer till det, som gör att det det inte är likadana poster i din union. Prova detta:

	sql = "SELECT * FROM (SELECT TOP 2 DateDiff('d', fran_datum, now()),  * FROM T_aktiviteter WHERE fran_datum < now() ORDER BY fran_datum DESC "
	sql = sql &" UNION"
	sql = sql &" SELECT TOP 5 DateDiff('d', fran_datum, now()), * FROM T_aktiviteter ORDER BY 1) ORDER BY fran_datum DESC"

Mvh

Medlem sedan juni 200032 967 inlägg
#20

Hur gick det? :)

254 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
117 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)