我有一张这样的桌子:
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值被重置。
我正在努力处理一个查询,它应该为给定的一组ModuleID提取最新的TotalPerDay值。
我尝试在ModuleID上使用GROUP BY子句。但是,如何在不使用聚合函数的情况下检索最新的TotalPerDay值呢?
顺便说一下,我使用的是SQL Server2008。
提前感谢!
发布于 2012-08-08 07:44:43
如果我正确理解了您的问题,那么这应该会为您提供模块每天的最新总计(如果时间戳是唯一的):
; 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 根据你对戈登的评论,你正在寻找每个模块每天的总和?如果是,则转到:
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)发布于 2012-08-08 07:31:45
所以你想要的查询是:
select moduleid, sum(value) as UpdatedTotalPerDay
from t
where moduleid in ( . . . )
group by moduleid这个查询有什么问题?如果你有一个模块If的索引,那么性能应该是好的。
如果这有历史记录,那么您可能还需要条件
where cast(timestamp as date) = cast(getdate() as date)https://stackoverflow.com/questions/11855520
复制相似问题