Sql-Server-2012

YTD 和 MTD 的總天數

  • May 7, 2020

使用上個月作為“結束”,我需要一種用於計算/匯總 YTD 和 MTD 天數的語法。例如,如果今天是 3/6,則 YTD 計算應為 2019 年 1 月 1 日至 2019 年 2 月 28 日。同樣,MTD 計算應為 2019 年 2 月 1 日至 2019 年 2 月 28 日。如果今天是 1 月,MTD 是 12 月 1 日 - 12 月 31 日,YTD 是 1 月 1 日 - 12 月 31 日。

不要想一個時期的結束,想想下一個時期的開始。您希望在年初(或上個月)或當月月初之前或之後的所有內容。這樣,當列或參數的數據類型發生變化時,您就可以編寫不易受到舍入問題的查詢。

對於年初至今:

DECLARE @thismonth date = DATEADD(DAY, 1-DAY(GETDATE()), GETDATE());

...
WHERE col >= DATEFROMPARTS(YEAR(DATEADD(MONTH, -1, @thismonth)), 1, 1)
 AND col <  @thismonth;

對於 MTD:

DECLARE @thismonth date = DATEADD(DAY, 1-DAY(GETDATE()), GETDATE());

...
WHERE col >= DATEADD(MONTH, -1, @thismonth)
 AND col <  @thismonth;

如果你只需要一個計數,那就是

-- YTD
SELECT DATEDIFF
(
 DAY,
 DATEFROMPARTS(YEAR(DATEADD(MONTH, -1, @thismonth)), 1, 1),
 @thismonth
); 

-- MTD
SELECT DATEDIFF
(
 DAY, 
 DATEADD(MONTH, -1, @thismonth),
 @thismonth
);

有關舍入問題的一些背景以及為什麼您不想從事計算期間“結束”或BETWEEN用於日期範圍查詢的業務:

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