首页 > 解决方案 > 以所需格式滚动 3 年的数据

问题描述

开始日期 = 2016-03-01 结束日期 = 2019-02-15

我需要查询/函数,它应该根据开始和结束日期检索以下结果。我有一个查询来构建结果。但是我需要一些查询/函数来在 5 到 10 秒内检索结果集并提高性能

在此处输入图像描述

标签: sql-server

解决方案


我突然想到,您可能正在寻找一个查询来从无到有生成该结果集。在 sqlserver 中,我们可以使用递归 cte:

DECLARE @dateFrom DATE = '2016-03-01'
DECLARE @dateTo DATE = '2019-02-15'

with d as (
        SELECT @datefrom as m
        UNION ALL
        SELECT DATEADD(MONTH,1,reqDate)
        FROM d
        WHERE DATEADD(MONTH,1,reqDate) <= @dateto
    ),
    SELECT 
        CONCAT( 
          DATENAME(MONTH, @dateFrom), ' ',
          CASE WHEN MONTH(d.m) < MONTH(@dateFrom) THEN YEAR(d.m) - 1 ELSE YEAR(d.m) END, '-',
          DATENAME(MONTH, @dateTo), ' ',
          CASE WHEN MONTH(d.m) < MONTH(@dateFrom) THEN YEAR(d.m) ELSE YEAR(d.m) +1 END
        ) as range,
        MONTH(d.m) as month,
        d.m as startdate,--do not use spaces in column names 
       CASE WHEN @dateTo < EOMONTH(d.m) then @dateTo ELSE EOMONTH(d.m) END as enddate --or dateadd 1 month then dateadd -1 day if you don't have eomonth
    FROM d
    OPTION(MAXRECURSION 0);

推荐阅读