1

我正在尝试以以下格式在表中插入记录

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

有人可以告诉我生成 Counter 字段值的 sql 吗?计数器值应在金额更改时增加,并在名称更改时重置。

4

1 回答 1

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;
于 2013-07-31T21:38:22.100 回答