Hmmm... Hur får jag ut 5 poster som är närmast dagens datum ur min access 2003 databas?
Datumen är i datumformat.
19 svar · 404 visningar · startad av mattiasnordin
Hmmm... Hur får jag ut 5 poster som är närmast dagens datum ur min access 2003 databas?
Datumen är i datumformat.
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
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.
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
Kan man inte använda BETWEEN istället, så slippar man göra en UNION?
hmm... Det går säkert. Men BETWEEN vadå? :)
Otroligt sexigt. Fungerar klockrent.
Men det är över min kompetens att förstå hur det fungerar... hi hi...
Bussigt :)
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
;-)
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 ????
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. ;)
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.
Ledsen @nders. Men jag förstår min fortfarande inte på hur man sorterar i frågan ovan. Kan du hjälpa mig ?
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
Ska prova lite senare. Tack. Svårt det där ;)
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 :)
Har du inte flera poster för de datumen det blir dubletter då?
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.
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
Hur gick det? :)