0

我有一张这样的桌子:

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 BYModuleID. 但是如何在TotalPerDay不使用聚合函数的情况下检索最新值?

顺便说一句,我使用的是 SQL Server 2008。

提前致谢!

4

2 回答 2

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)
于 2012-08-07T23:44:43.323 回答
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)
于 2012-08-07T23:31:45.387 回答