Count

計算給定日期中每一天的總出現次數

  • May 12, 2020

我有這個表並且沒有足夠的 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 的這篇關於處理日期範圍的博文;它不是直接針對您的問題,因為您(正確地)使用了Datetype 而不是DateTime,但如果您正在處理此類數據和此類查詢,它仍然是我認為必須閱讀的內容。

引用自:https://dba.stackexchange.com/questions/193030