按历史“本月最后一天”过滤表

Mik*_*nes 3 sql-server date sql-server-2016 date-math

我有一个每日附加表,我需要一个公式来将表结果过滤到任何给定历史月份的最后一天。例如:

桌子:

DwDate            Balance
20181231           $10
20190131           $80   
20190228           $75
20190331           $50
Run Code Online (Sandbox Code Playgroud)

99% 的时间我只需要MAX(DwDate),这将是:

@MaxDate = (SELECT MAX(DwDate) FROM dbo.TABLE)
Run Code Online (Sandbox Code Playgroud)

但是,有时我需要一个可以让我回到 1 或 2 个月的公式:

@MaxDate - 2 Months
Run Code Online (Sandbox Code Playgroud)

sti*_*bit 5

要从日期减去一个月,您可以使用dateadd().

例如

SET @MaxDate = dateadd(month, -1, @MaxDate);
Run Code Online (Sandbox Code Playgroud)

将从您的@MaxDate. 不过,那将保留一个月中的某一天。(除非该月不存在这一天,否则它是该月的最后一天,因此例如第 31 天可能成为第 30 天。)

可以使用日期所在的月份的最后一天的日期eomonth()

SET @MaxDate = eomonth(@MaxDate);
Run Code Online (Sandbox Code Playgroud)

将设置@MaxDate@MaxDate之前所在月份的最后一天。

eomonth()可选地采用第二个参数,它是要添加到月份的整数。所以要设置@MaxDate为上个月的最后一天,@MaxDate你可能会使用

SET @MaxDate = eomonth(@MaxDate, -1);
Run Code Online (Sandbox Code Playgroud)