我有一张这样的表:
ModuleID TimeStamp Value TotalPerDay
1 8/5/2012 9:00 PM 0.25 0.25
2 8/5/2012 9:00 PM 0.15 0.15
3 8/5/2012 9:00 PM 0 0
4 8/5/2012 9:00 PM 1.25 1.25
1 8/5/2012 10:00 PM 0.05 0.30
3 8/5/2012 10:00 PM 0.89 0.89
4 8/5/2012 10:00 PM 0.14 1.39
4 8/5/2012 11:00 PM 0.70 2.09
4 8/5/2012 12:00 PM 0.43 2.52
...
每小时我有15000个模块更新此表。此外,在午夜,TotalPerDay
值会重置。
我正在努力处理一个查询,该查询应该为给定的一组TotalPerDay
提取最新的ModuleID
值。
我尝试在GROUP BY
上使用ModuleID
条款。但是,如何在不使用聚合函数的情况下检索最新的TotalPerDay
值?
顺便说一下,我正在使用SQL Server 2008。
提前致谢!
答案 0 :(得分:1)
所以你想要的查询是:
select moduleid, sum(value) as UpdatedTotalPerDay
from t
where moduleid in ( . . . )
group by moduleid
此查询有什么问题?如果你有一个关于moduleid的索引,性能应该是好的。
如果这有历史,那么您可能还需要条件
where cast(timestamp as date) = cast(getdate() as date)
答案 1 :(得分:1)
如果我理解你的问题,那么这应该按照模块给你每天的最新总数(如果时间戳是唯一的):
; with MyCte (moduleId, TimeStamp)
AS(
select moduleId, max(TimeStamp)
from modules
group by moduleId
)
select * from modules a
join MyCte b
on a.moduleId = b.moduleId
and a.TimeStamp = b.TimeStamp
根据您对Gordon的评论,您是否正在寻找每个模块每天的SUM?如果是,那么你去吧:
select ModuleId,
convert(varchar,cast(TimeStamp as datetime),101),
sum(totalPerDay) as GrandTotal
from modules
group by ModuleId, convert(varchar,cast(TimeStamp as datetime),101)