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
))
)
我正在使用 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
))
)