如何从周日到周六获得上周日期

时间:2014-04-29 17:29:13

标签: sql date

我有下表:

Date          Value
4/13/2014     25
4/14/2014     35
4/15/2014     30
4/16/2014     25
4/17/2014     21
4/18/2014     20
4/19/2014     42
4/20/2014     54
4/21/2014     44
4/22/2014     47
4/23/2014     48
4/24/2014     34
4/25/2014     32
4/26/2014     18
4/27/2014     20
4/28/2014     32
4/29/2014     34

每日更新。

如何从上周(周日至周六)添加总计Value的SQL查询?

在这种情况下,星期日是4/20,星期六是4/26。

我目前有以下查询从本周获得本周:

SELECT * , DATENAME(WEEKDAY, Date) AS [DAY], CAST(CONVERT(VARCHAR(12), DATEADD(DAY , 7-DATEPART(WEEKDAY,GETDATE()),GETDATE()), 110) AS DATE) AS 'WeekEnding'
FROM [database].[dbo].[table]
WHERE Date >= cast(dateadd(day,1-datepart(dw, getdate()), getdate()) as date)
--SUNDAY to SATURDAY

3 个答案:

答案 0 :(得分:2)

如果我正确理解了您的问题,您希望在上周日至周六的时间段内获得SUM字段的Value。既然你说这个表每天都在更新,我会假设你指的是最后一个实际周,而不仅仅是恰好在数据库中的最后一周。

这是一个通过在周日至周六之间过滤来对记录进行求和的查询。在示例数据中,总计为277

SELECT SUM(Value) AS TotalValue
FROM ValueTable
WHERE Date >= DATEADD(day, -((DATEPART(dw, GETDATE()) + @@DATEFIRST) % 7) - 6,
              DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)) AND
      Date <= DATEADD(day, -(DATEPART(dw, GETDATE()) + @@DATEFIRST) % 7,
              DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0))

说明:DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)部分只删除当前日期时间的时间部分。另一部分DATEADD(day, -(DATEPART(dw, GETDATE()) + @@DATEFIRST) % 7)减去当前日期weekday和星期六之间的差异,得出上周六的日期。

答案 1 :(得分:1)

对于Oracle,您可以尝试。 IW - 一年内的周数,根据ISO标准:

SELECT to_char( Date , 'IW' ), SUM (Value)
FROM TableA
GROUP BY to_char( Date , 'IW' );

答案 2 :(得分:0)

获取上周六到周日数据的更简单方法是:

select * from my_table_name where my_date between 
DATEADD(dd, DATEPART(DW,GETDATE())*-1+1, GETDATE()) AND DATEADD(dd, DATEPART(DW,GETDATE())*-1+7, GETDATE())

DATEADD(dd, DATEPART(DW,GETDATE())*-1+1, GETDATE()) 是上周六和 DATEPART(DW,GETDATE())*-1+7, GETDATE()) 是即将到来的星期天。