T-SQL использовать переменную таблицы или сумму против родительской таблицы - PullRequest
0 голосов
/ 21 июня 2011

Сценарий таков: я создаю таблицу журнала, которая в итоге станет достаточно большой, как только все будет сказано и сделано, и я хочу создать таблицу состояния, которая будет запрашивать данные из таблицы с разными диапазонами дат и суммировать результаты на несколько полных полей.

Я планирую записать это в хранимую процедуру, но мой вопрос: смогу ли я получить максимальную производительность от чтения всех моих записей из таблицы журналов во временную таблицу перед выполнением операций суммирования.

IE у меня есть эта таблица:

SummaryValues
90DayValues 
60DayValues
30DayValues
14DayValues
7DayValues
1DayValues

Было бы логично взять все значения за предыдущие 90 дней, а затем вставить их в табличное значение, а затем вычислить мою сумму для 6 моих полей в моей сводной таблице или было бы так же быстро выполнить 6 сумм выписки из лог-таблицы?

1 Ответ

1 голос
/ 21 июня 2011

Иногда вам лучше сначала прочитать временную таблицу.Иногда нет.Это имеет смысл, если у вас есть несколько проходов обработки для одних и тех же данных

Однако, если вы хотите "последние 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
   ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...