条件SQL查询基于少量条件获取季度的最后日期

时间:2019-06-07 09:35:41

标签: sql sql-server

基本上每个季度需要一份报告,分析日期(任何日期)是上一季度的最后一个日期。因此,如果我们在7月10日加载,则“分析日期”将是6月30日(同年)。 如何-用户有可能希望提早加载数据,以便查看在本季度末可能需要解决的问题。在这种情况下,他们可能希望在6月20日加载,“分析日期”仍为6月30日。

考虑到只需要提前一个月的特定条件,我该如何针对这两个条件编写查询。

1 个答案:

答案 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')