一周结束时有多少张门票?

问题描述 投票:-1回答:1

希望有人可以帮助我进一步解决这个问题。

我正在编写一个查询,以便每周提取打开的票证信息。打开的票证被归类为具有解决方案为NULL的ticketID。

我希望按周开始日期(星期一到星期五)显示这些数据,因此所有在星期五下午5点之前未解决的门票将计入该周。输出看起来像这样。

week commencing | open tickets
05-jan-2018     |     5
12-jan-2018     |     6

我需要这个至少12个月(52周)

实现这一目标的最佳方式是什么?我有一个日历表,其中存储了日期,周开始日期,我只是不确定如何让它完成上述操作。

到目前为止,我只在我的select语句中有以下子句CASE WHEN Solvedate为null或已解决> @LastWorkDay然后1 else 0 LastWorkDay参数设置为上周五,所以这可以工作并显示上周所有打开的票据。但是,我不太确定如何获取过去52周的数据

非常感谢

sql sql-server-2012
1个回答
2
投票

我认为这可以满足您的需求。它被设计为运行一个日历年(您通过更改@vYear的值来选择年份)。

DECLARE 
    @vYear AS INT,
    @vJan1Year DATETIME,
    @vDec31Year DATETIME
/*  Set the @vYear variable to the year you are analyzing   */
SET
    @vYear = 2018
SET 
    @vJan1Year = DATEADD(yyyy, @vYear - 1900, 0)
SET
    @vDec31Year = DATEADD(yyyy, @vYear - 1899, 0)
; WITH 
    cte_Fridays AS 
    (
    SELECT 
        @vJan1Year AS DateOfYear
    UNION ALL
    SELECT 
        DATEADD(d, 1 ,cte_Fridays.DateOfYear)
    FROM 
        cte_Fridays
    WHERE 
        DATEADD(d,1,cte_Fridays.DateOfYear) < @vDec31Year
    )
SELECT 
    cte_Fridays.DateOfYear,
    COUNT(t.[ticketID])
FROM
    cte_Fridays
LEFT JOIN
    yourtablename AS t
ON
    (t.[solvedate] IS NULL OR  t.[solvedate] > cte_Fridays.DateOfYear)
AND
    t.[opendate] < cte_Fridays.DateOfYear
WHERE 
    DATENAME(dw, DATEADD(d, 0 ,cte_Fridays.DateOfYear)) = 'Friday'
GROUP BY 
    cte_Fridays.DateOfYear
ORDER BY 
    DateOfYear
OPTION 
    (MaxRecursion 366)
© www.soinside.com 2019 - 2024. All rights reserved.