2013-07-31 2 views
1

Я пытаюсь вставить записи в таблице ниже в форматеСчетчики в Teradata при вставке записей

Name    Amount  Date  Counter  
A     100  Jan 1   1 
A     100  Jan2   1 
A     200  Jan 10   2 
A     300  Mar 30   3 
B     50  Jan 7   1 
C     20  Jan 7   1 

Может кто-нибудь сказать мне SQL для генерации значения для поля счетчика. Значение счетчика должно увеличиваться каждый раз, когда сумма изменяется и сбрасывается при изменении имени.

ответ

2

Что вам нужно - это функция DENSE_RANK. К сожалению, он не был реализован до TD14.10, но он может быть написан с использованием вложенных OLAP-функций:

SELECT 
    Name 
    ,Amount 
    ,date_col 
    ,SUM(flag) 
    OVER (PARTITION BY Name 
      ORDER BY date_col 
      ROWS UNBOUNDED PRECEDING) AS "DENSE_RANK" 
FROM 
(
    SELECT 
     Name 
     ,Amount 
     ,date_col 
     ,CASE 
      WHEN Amount = MIN(Amount) 
         OVER (PARTITION BY Name 
           ORDER BY date_col 
           ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) 
      THEN 0 
      ELSE 1 
     END AS flag 
    FROM dropme 
) AS dt; 
+0

Большое спасибо! Это сработало :) –

Смежные вопросы