我有下表:
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
答案 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())
是即将到来的星期天。