Hallo
Ich habe eine Tabelle, in der alle Termine eingetragen werden. In dieser existieren unteranderem zwei Spalten (StartDATE und EndDATE) vom typ int. Also steht nich das effektive datum drin, sondern der Wert entsprechend dem 01.01.1900 = 0
Weiss grad nicht mehr wie man dem genau sagt.
Ich möchte jetzt alle Termine erhalten, welche mindestens ein Datum der letzten sieben Tage zwischen oder gleich dem StartDATE und EndDATE sind.
Nehmen wir an, heute ist der 08. Juni (40337) und das sind meine eingetragenen Termine:
--------------------StartDATE------------------EndDATE
Termin 1---------40179---(01.01.2010)-----------40543---(31.12.2010)
Termin 2---------40179---(01.01.2010)-----------40333---(04.06.2010)
Termin 3---------40334---(05.06.2010)-----------40543---(31.12.2010)
Termin 4---------40331---(02.06.2010)-----------40335---(06.06.2010)
Termin 5---------40179---(01.01.2010)-----------40209---(31.01.2010)
Termin 6---------40360---(01.07.2010)-----------40390---(31.07.2010)
Erscheinen sollten mir jetzt die Termine 1 - 4, da die Daten der letzten Woche den Werten 40330, 40331, 40332, 40333, 40334, 40335 und 40336 entsprechen und mindestens eine dieser Zahlen jeweils zwischen dem StartDATE und EndDATE liegt.
Ich habe schon versucht meine Abfrage zum erhalten aller Termine vom letzten Arbeitstag abzuändern. Jedoch ohne Erfolg. Oder zumindest sehe ich die Lösung nicht.
select *
from activity as a
where convert(int, a.startdate) <= (select cast(getdate() as int)) - (select 'Wochentag' =
case
when datename(dw, getdate()) = 'Monday' then 3
when datename(dw, getdate()) = 'Tuesday' then 1
when datename(dw, getdate()) = 'Wednesday' then 1
when datename(dw, getdate()) = 'Thursday' then 1
when datename(dw, getdate()) = 'Friday' then 1
when datename(dw, getdate()) = 'Saturday' then 1
when datename(dw, getdate()) = 'Sunday' then 2
else 1
end)
and convert(int, a.enddate) >= cast (getdate() as int) - (select 'Wochentag' =
case
when datename(dw, getdate()) = 'Monday' then 3
when datename(dw, getdate()) = 'Tuesday' then 1
when datename(dw, getdate()) = 'Wednesday' then 1
when datename(dw, getdate()) = 'Thursday' then 1
when datename(dw, getdate()) = 'Friday' then 1
when datename(dw, getdate()) = 'Saturday' then 1
when datename(dw, getdate()) = 'Sunday' then 2
else 1
end)
Ich habe eine Tabelle, in der alle Termine eingetragen werden. In dieser existieren unteranderem zwei Spalten (StartDATE und EndDATE) vom typ int. Also steht nich das effektive datum drin, sondern der Wert entsprechend dem 01.01.1900 = 0
Weiss grad nicht mehr wie man dem genau sagt.
Ich möchte jetzt alle Termine erhalten, welche mindestens ein Datum der letzten sieben Tage zwischen oder gleich dem StartDATE und EndDATE sind.
Nehmen wir an, heute ist der 08. Juni (40337) und das sind meine eingetragenen Termine:
--------------------StartDATE------------------EndDATE
Termin 1---------40179---(01.01.2010)-----------40543---(31.12.2010)
Termin 2---------40179---(01.01.2010)-----------40333---(04.06.2010)
Termin 3---------40334---(05.06.2010)-----------40543---(31.12.2010)
Termin 4---------40331---(02.06.2010)-----------40335---(06.06.2010)
Termin 5---------40179---(01.01.2010)-----------40209---(31.01.2010)
Termin 6---------40360---(01.07.2010)-----------40390---(31.07.2010)
Erscheinen sollten mir jetzt die Termine 1 - 4, da die Daten der letzten Woche den Werten 40330, 40331, 40332, 40333, 40334, 40335 und 40336 entsprechen und mindestens eine dieser Zahlen jeweils zwischen dem StartDATE und EndDATE liegt.
Ich habe schon versucht meine Abfrage zum erhalten aller Termine vom letzten Arbeitstag abzuändern. Jedoch ohne Erfolg. Oder zumindest sehe ich die Lösung nicht.
select *
from activity as a
where convert(int, a.startdate) <= (select cast(getdate() as int)) - (select 'Wochentag' =
case
when datename(dw, getdate()) = 'Monday' then 3
when datename(dw, getdate()) = 'Tuesday' then 1
when datename(dw, getdate()) = 'Wednesday' then 1
when datename(dw, getdate()) = 'Thursday' then 1
when datename(dw, getdate()) = 'Friday' then 1
when datename(dw, getdate()) = 'Saturday' then 1
when datename(dw, getdate()) = 'Sunday' then 2
else 1
end)
and convert(int, a.enddate) >= cast (getdate() as int) - (select 'Wochentag' =
case
when datename(dw, getdate()) = 'Monday' then 3
when datename(dw, getdate()) = 'Tuesday' then 1
when datename(dw, getdate()) = 'Wednesday' then 1
when datename(dw, getdate()) = 'Thursday' then 1
when datename(dw, getdate()) = 'Friday' then 1
when datename(dw, getdate()) = 'Saturday' then 1
when datename(dw, getdate()) = 'Sunday' then 2
else 1
end)
Comment