Hej
Jag vill få fram den post i databasen där ett datum ligger närmast dagens datum. I första hand ska den öppna datum som kommer men finns inget sådant så ska den öppna ett tidigare datum.
ex.
Select top 1 datum from kalender where datum ........
7 svar · 513 visningar · startad av Addeladde
Hej
Jag vill få fram den post i databasen där ett datum ligger närmast dagens datum. I första hand ska den öppna datum som kommer men finns inget sådant så ska den öppna ett tidigare datum.
ex.
Select top 1 datum from kalender where datum ........
select min(datum)
from kalender
where datum > date() -- getdate() etc beroende på dbms
union all
select max(datum)
from kalender
where datum < date()
and not exists
(select *
from kalender
where datum > date())
Försöker få till det men lyckas inte så bra. Det är lite fler tabeller.
Anvandare, lektioner och kursmedlemskap.
Det jag vill åstadkomma är att öppna upp den den lektion med närmast datum helst fram i tiden. Lektionen ska sedan tillhöra en kurs som användaren är kopplad till.
Databasen är access.
SELECT min(l.lektionDatum), k.kursID
FROM kurser as k, kursmedlemskap as km, lektioner
WHERE km.anvandarID= 1
And km.kursID = k.kursID
And k.kursID = l.kursID
And l.lektiondatum > date()
union all
select max(lektiondatum)
from lektioner where lektiondatum < date()
and not exists (select * from lektioner where lektiondatum > date())
Antalet kolumner i tabellerna eller frågorna i unionsfrågan stämmer inte överens.
Felmeddelandet är väl ganska tydligt?
I den första select-frågan hämtar du två fält / värden, och i den andra bara ett.
Tror jag fattat lite mer hur det funkar men behöver nog lite förklaringar.
Först och främst den sista delen i koden "if not exists" hämtar inte den sql-satsen alla lektioner där datumet är mindre. Behöver bara få kursID på den kurs som har en lektion närmast.
Nu har jag koden
Select min(l.lektionDatum), k.kursID
From kurser as k, kursmedlemskap as km, lektioner as l
Where km.anvandarID= 1
And km.kursID = k.kursID
And k.kursID = l.kursID
And l.lektiondatum > date()
union all
Select max(l.lektionDatum), k.kursID
From kurser as k, kursmedlemskap as km, lektioner as l
Where km.anvandarID= 1
And km.kursID = k.kursID
And k.kursID = l.kursID
And l.lektiondatum < date()
And not exists (Select l.lektionDatum, k.kursID
From kurser as k, kursmedlemskap as km, lektioner as l
Where km.anvandarID= 1
And km.kursID = k.kursID
And k.kursID = l.kursID
And l.lektiondatum > date())
Nu får jag felmeddelandet:
Du försökte köra en fråga med en mängdfunktion som inte innehöll det angivna uttrycket 'kursID'.
Ingen?
Tog bort min() och använde top 1 och order by istället.
sqlString = "Select top 1 l.lektionDatum, l.kursID " &_
"From kursmedlemskap as km, lektioner as l " &_
"Where km.kursID = l.kursID " &_
"And km.anvandarID = 1 " &_
"And l.lektionDatum > #"& now &"# " &_
"Order By l.lektionDatum Desc " &_
"Union All " &_
"Select top 1 l.lektionDatum, l.kursID " &_
"From kursmedlemskap as km, lektioner as l " &_
"Where km.kursID = l.kursID " &_
"And km.anvandarID = 1 " &_
"And l.lektionDatum < #"& now &"# " &_
"And not exists (Select l.lektionDatum from kursmedlemskap as km, lektioner as l Where km.anvandarID = 1 And km.kursID = l.kursID And l.lektiondatum > #"& now &"#) " &_
"Order By l.lektionDatum ASC "
Blir det någon skillnad?
Då verkar det bli problem när man har desc i ena frågan och asc i den andra frågan.