webForumDet fria alternativet

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

19 svar · 404 visningar · startad av mattiasnordin

mattiasnordinMedlem sedan maj 20012 080 inlägg
#1

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

Datumen är i datumformat.

@ndersMedlem sedan juni 200032 969 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

mattiasnordinMedlem sedan maj 20012 080 inlägg
#3

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

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

mattiasnordinMedlem 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.

@ndersMedlem sedan juni 200032 969 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

Jesper TMedlem sedan nov. 20017 144 inlägg
#6

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

@ndersMedlem sedan juni 200032 969 inlägg
#7

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

mattiasnordinMedlem 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 :)

@ndersMedlem sedan juni 200032 969 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

;-)

mattiasnordinMedlem 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 ????

@ndersMedlem sedan juni 200032 969 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. ;)

mattiasnordinMedlem 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.

mattiasnordinMedlem 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 ?

@ndersMedlem sedan juni 200032 969 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

mattiasnordinMedlem sedan maj 20012 080 inlägg
#15

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

mattiasnordinMedlem 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 :)

@ndersMedlem sedan juni 200032 969 inlägg
#17

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

mattiasnordinMedlem 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.

@ndersMedlem sedan juni 200032 969 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

@ndersMedlem sedan juni 200032 969 inlägg
#20

Hur gick det? :)

146 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
144 ms — hämta tråd, inlägg och bilagor (db)