场景是这样的,我正在创建一个日志表,一旦说完所有就会变得非常大并且我想创建一个状态表,它将从具有不同日期范围的表中查询并对结果求和分成多个总字段。
我计划将其写入存储过程但我的问题是,在执行求和操作之前,我会从日志表中读取所有记录到临时表中获得最佳性能。
IE我有这张表:
SummaryValues
90DayValues
60DayValues
30DayValues
14DayValues
7DayValues
1DayValues
在接下来的90天中取出所有值然后将它们插入表值然后在我的汇总表中计算我的6个字段的总和或者执行6个总和的速度是否合理是合乎逻辑的日志表中的语句?
答案 0 :(得分:1)
有时你最好先阅读临时表。有时不是。如果您对同一数据进行多次处理,则这是有意义的
但是,如果您想要“过去90天”,“过去60天”等,那么可以在一个查询中完成
再次阅读问题,我只需运行一个查询并一次性计算所有值。而且不打扰任何中间表
SELECT
Stuff,
SUM(CASE WHEN dayDiff <= 90 THEN SomeValue ELSE 0 END) AS SumValue90,
SUM(CASE WHEN dayDiff <= 60 THEN SomeValue ELSE 0 END) AS SumValue60,
SUM(CASE WHEN dayDiff <= 30 THEN SomeValue ELSE 0 END) AS SumValue30
FROM
(
SELECT
Stuff,
DATEDIFF(day, SomeData, GETDATE()) AS dayDiff
FROM
Mytable
WHERE
...
) foo
GROUP BY
...