Каков наиболее эффективный оператор SQL для создания промежуточных итогов в Advantage SQL? - PullRequest
1 голос
/ 19 февраля 2011

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

SELECT a.fiscal,sum(a.amount) periodTotal,(SELECT sum(b.amount) 
FROM tableName b  WHERE b.fiscal<=a.fiscal) runningTotal 
FROM tableName a GROUP BY a.fiscal,runningTotal

но набор данных большой (более 1 миллиона записей), и поэтому мне интересно, является ли это наиболее эффективным способом получения этой информации.

Исходные данные в таблице выглядят так:

Fiscal Account
Period ID      Amount
====== ======= ======
     1 Cash         1
     1 Cash         2
     2 Cash         1
     2 Cash         2
     1 A/R          1
     1 A/R          2
     2 A/R          1
     2 A/R          2

Я бы хотел, чтобы результаты были такими:

               Total  
Fiscal Account For    Running 
Period ID      Period Total
====== ======= ====== =======
     1 Cash         3       3
     2 Cash         3       6
     1 A/R          3       3
     2 A/R          3       6

Ответы [ 2 ]

2 голосов
/ 23 февраля 2011

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

SELECT "Fiscal Period", "Account ID", Sum( amount ) PeriodTotal
INTO #temp
FROM TableName
GROUP BY 2, 1;

SELECT "Fiscal Period", "Account ID", PeriodTotal,
   ( SELECT Sum(PeriodTotal) FROM #temp b 
     WHERE b."Account ID" = a."Account ID" 
        And b."Fiscal Period" <= a."Fiscal Period" ) RunningTotal
FROM #temp a
0 голосов
/ 21 февраля 2011

Возможно, не самый эффективный, но SQL-курсор и итерация по таблице?

...