基本上每个季度需要一份报告,分析日期(任何日期)是上一季度的最后一个日期。因此,如果我们在7月10日加载,则“分析日期”将是6月30日(同年)。 如何-用户有可能希望提早加载数据,以便查看在本季度末可能需要解决的问题。在这种情况下,他们可能希望在6月20日加载,“分析日期”仍为6月30日。
考虑到只需要提前一个月的特定条件,我该如何针对这两个条件编写查询。
答案 0 :(得分:1)
这应该使您走上正确的道路。如果您使用的SQL Server版本早于2012,则需要使用某些内容代替EOMONTH
CREATE FUNCTION dbo.GetAnalysisDate(@date DATE)
RETURNS DATE
AS
BEGIN
IF MONTH(@date) % 3 = 0 RETURN EOMONTH(@date)
-- else
RETURN DATEADD(dd, -1, DATEADD(qq, DATEDIFF(qq, 0, @date), 0))
END
GO
-- tests
-- these should return 20181231
SELECT dbo.GetAnalysisDate('20190101')
SELECT dbo.GetAnalysisDate('20190120')
SELECT dbo.GetAnalysisDate('20190220')
-- these should return 20190331
SELECT dbo.GetAnalysisDate('20190320')
SELECT dbo.GetAnalysisDate('20190401')
SELECT dbo.GetAnalysisDate('20190420')