Count
計算給定日期中每一天的總出現次數
我有這個表並且沒有足夠的 SQL 來進行查詢以實現下圖所示的結果。
CREATE TABLE myDates ( id integer NOT NULL, startDate date NOT NULL, endDate date NOT NULL ); insert into myDates(id, startDate, endDate) values (1, '2017-12-26', '2017-12-29'), (2, '2017-12-29', '2017-12-29'), (3, '2017-12-14', '2017-12-29'), (4, '2017-12-18', '2017-12-21'), (5, '2017-12-26', '2017-12-29'), (6, '2017-12-28', '2017-12-29'), (7, '2017-12-26', '2017-12-29'), (8, '2017-12-25', '2017-12-27')
查看 ‘startDate’ 和 ’endDate’ 之間的所有天數併計算每天發生的總數:
我剛剛從 Excel 文件中添加了這張圖片,以更好地說明我想要實現的目標。我正在從excel轉移到sql。忽略週末和 22/12 和 25/12。
Regads,埃利奧·費爾南德斯
這是一種非常“程序化”的方法,與基於集合/純 RDBMS 不同,但它應該可以工作。基本上,您創建一個“頻率表”,它跟踪您的源表中有多少次包含“日期”的行,對於從
min
到的每個日期max
。為遵循您的程式碼而建構的範常式式碼(即您已經創建了myDates
表格並用數據填充了它)。CREATE TABLE #DateFrequency (theDate date, freq int); --TRUNCATE TABLE #DateFrequency; DECLARE @theDate date, @maxDate date; SELECT @theDate = MIN(startDate), @maxDate = MAX(endDate) FROM myDates WHILE (@theDate <= @maxDate) BEGIN INSERT INTO #DateFrequency (theDate, freq) SELECT @theDate, COUNT(id) FROM myDates WHERE @theDate BETWEEN startDate AND endDate; SET @theDate = DATEADD(DAY, 1, @theDate); END SELECT * FROM #DateFrequency; --DROP TABLE #DateFrequency;
然後對#DateFrequency 中的數據做任何你需要做的事情;如果需要,將其設為永久表(而不是#temporary)。
PS:閱讀Aaron Bertrand 的這篇關於處理日期範圍的博文;它不是直接針對您的問題,因為您(正確地)使用了
Date
type 而不是DateTime
,但如果您正在處理此類數據和此類查詢,它仍然是我認為必須閱讀的內容。