MS SQL og datoer - hjælp til select
Jeg har følgende tabel :Tasks
TaskID - integer
ActivityID - integer
TaskStart - datetime, med data i både dato- og tids-delen.
TaskEnd - som TaskEnd
AllDay - bool
Comment - string
og for en given aktivitet, kan der kun være een opgave (task) per dag, og kan forekomme på samme eller forskellige tider på dagen. tidspunkter
Nu ønsker jeg at finde de første X datoer fra et givet starttidspunkt på hvilke en given aktivitet forekommer. Det går skam fint nok med :
SELECT TOP (@NumberOfTaskDays) TaskStart
FROM Tasks AS Tasks
WHERE (ActivityID = @ActivityID) AND (TaskStart >=@StartDate)
ORDER BY TaskStart
Så har jeg en liste af tidspunkter ,men ej datoer.
Nu er mit ønske, at finde alle de opgaver (tasks) som tilhører alle aktiviteterne og som forekommer på de samme datoer (ej tidspunkter, men datoer), som for opgaverne fra den ovenstående select.
Noget i stil med nedenstående (som ville virke hvis TaskStart/TaskEnd var datoer):
SELECT TaskID, ActivityID, TaskStart, TaskEnd, AllDay, Comment
FROM Tasks
WHERE (TaskStart IN
(SELECT TOP (@NumberOfTaskDays) TaskStart
FROM Tasks AS Tasks_1
WHERE (ActivityID = @ActivityID) AND (TaskStart >= @StartDate)
ORDER BY TaskStart))
Nu er problemet at TaskStart/TaskEnd er DateTime - så medmindre alle opgaver starter på både samme dato og tid som min liste i IN, så vil den SELECT jo fejle.
Jeg har ikke kunnet finde nogen funktion som trækker Dato-delen ud af en datetime, men kun de separate Day, Month, Year - og så ved jeg ikke hvordan jeg gifter mine to selects.
Måske er der en anden måde at gøre det på - alle forslag modtages :-)