Sql-Server-2012
YTD 和 MTD 的總天數
使用上個月作為“結束”,我需要一種用於計算/匯總 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
用於日期範圍查詢的業務: