SQL Server 2014Erzeugt alle Daten zwischen zwei
ich in einer Tabelle gespeicherten Daten müssen alle Daten zwischen den Start- und Enddaten aus einer Tabelle #data zu erzeugen. Tabelle #data enthält mehrere Zeilen mit Start- und Enddatum.
CREATE TABLE #data (
StartDate DATE NOT NULL,
EndDate DATE NOT NULL,
Opt INT NOT NULL)
insert into #data values('2016-04-10', '2016-04-12', 2)
insert into #data values('2016-04-10', '2016-04-15', 3)
insert into #data values('2016-05-10', '2016-05-12', 4)
Tabelle #Daten können Hunderte von Zeilen enthalten.
Meine endgültige Auswahl muss folgende Angaben enthalten:
2016-04-10 2
2016-04-11 2
2016-04-12 2
2016-04-10 3
2016-04-11 3
2016-04-12 3
2016-04-13 3
2016-04-14 3
2016-04-15 3
2016-05-10 4
2016-05-11 4
2016-05-12 4
ich zur Zeit dazu haben, aber ich habe die Auswahl für alle Zeilen in #data erweitern:
DECLARE @StartDateTime DATETIME
DECLARE @EndDateTime DATETIME
SET @StartDateTime = '2015-01-01'
SET @EndDateTime = '2015-01-12';
--delete from #tmp
;WITH DateRange(DateData) AS
(
SELECT @StartDateTime as Date
UNION ALL
SELECT DATEADD(d,1,DateData)
FROM DateRange
WHERE DateData < @EndDateTime
)
INSERT INTO #tmp SELECT DateData, 1 -- instead of 1 shall be Opt
FROM DateRange
OPTION (MAXRECURSION 0)
select * from #tmp
Danke.
Diese Abfrage ist Teil eines größeren, der häufig ausgeführt wird und zeitkritisch ist. Ich habe keinen Kalendertisch, denkst du, ich werde einen unter diesen Umständen haben? Soll die Kalendertabelle eine normale/statische Tabelle sein? Vielen Dank. –
@MihaiHangiu Wenn Sie diese Art der Abfrage häufig und/oder mit großen Datensätzen dann definitiv ja. Die Artikel, mit denen ich verlinkt bin, erklären das Konzept und die Anwendungsfälle im Detail. Es ist im Grunde eine statische Tabelle mit Daten und Informationen zu Daten. – jpw