SQL 服务器:与上周的日期不同

SQL Server : datediff from last week

我正在使用 SQL Server 2012 并声明 returns 本周的这些记录:

Employee , Sun , Mon , Tues, Wed, Thurs, Fri, Sat 
--------------------------------------------------
 Smith      5     8      5    4     8     4    0
 Burt       7     1      8    5     4     4    7

这是我的SQL,一周从太阳开始。我要如何更改才能显示前一周?

SELECT
    ReproofMidLineBy AS Employee,
    COUNT( CASE WHEN DATENAME( dw, ReproofMidLineDate )= 'Sunday' THEN 1 END ) AS Sun,
    COUNT( CASE WHEN DATENAME( dw, ReproofMidLineDate )= 'Monday' THEN 1 END ) AS Mon,
    COUNT( CASE WHEN DATENAME( dw, ReproofMidLineDate )= 'Tuesday' THEN 1 END ) AS Tues,
    COUNT( CASE WHEN DATENAME( dw, ReproofMidLineDate )= 'Wednesday' THEN 1 END ) AS Wed,
    COUNT( CASE WHEN DATENAME( dw, ReproofMidLineDate )= 'Thursday' THEN 1 END ) AS Thurs,
    COUNT( CASE WHEN DATENAME( dw, ReproofMidLineDate )= 'Friday' THEN 1 END ) AS Fri,
    COUNT( CASE WHEN DATENAME( dw, ReproofMidLineDate )= 'Saturday' THEN 1 END ) AS Sat,
    COUNT(*) AS TOTAL
FROM
    dbo.tblJobLog
WHERE
    (ReproofMidLineDate BETWEEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()) / 7 * 7, 0) 
                        AND DATEADD(DAY, DATEDIFF(DAY, 6, GETDATE()- 1) / 7 * 7 + 7, 6)
     )
GROUP BY
    ReproofMidLineBy

一个非常简单的方法是增加一周进行比较:

WHERE DATEADD(week, 1, ReproofMidLineDate) BETWEEN . . .

您还可以从 BETWEEN 的界限中减去一周(或 7 天)。

将您的 where 子句替换为:

    WHERE
(
    ReproofMidLineDate BETWEEN DATEADD(WEEK, -1, DATEADD(
        DAY,
        DATEDIFF(
            DAY,
            0,
            GETDATE()
        )/ 7 * 7,
        0))


    AND DATEADD(WEEK, -1, DATEADD(
        DAY,
        DATEDIFF(
            DAY,
            6,
            GETDATE()- 1
        )/ 7 * 7 + 7,
        6
    ))
)