Row_Number Sybase SQL 多个条件下的任意位置更改

Row_Number Sybase SQL Anywhere change on multiple condition

我有一个选择 returns

EMP DOC  DATE
  1  78 01/01
  1  96 02/01
  1  96 02/01
  1 105 07/01
  2   4 04/01
  2   7 04/01
  3  45 07/01
  3  45 07/01
  3  67 09/01

我想添加一个行号(我将把它用作主 ID)但我希望它在 "EMP" 更改时始终更改,并且在文档更新时也不会更改与上一个一样:

EMP DOC  DATE  ID
  1  78 01/01   1
  1  96 02/01   2
  1  96 02/01   2
  1 105 07/01   3
  2   4 04/01   1
  2   7 04/01   2
  3  45 07/01   1
  3  45 07/01   1
  3  67 09/01   2

在 SQL 服务器中,我可以使用 LAG 来比较以前的 DOC,但我似乎无法找到进入 SYBASE 的方法 SQL 在任何地方,我都在使用 ROW_NUMBER 到 "EMP" 的分区,但这不是我需要的。

SELECT EMP, DOC, DATE, ROW_NUMBER() OVER (PARTITION BY EMP ORDER BY EMP, DOC, DATE) ID -- <== THIS WILL CHANGE THE ROW NUMBER ON SAME DOC ON SAME EMP, SO WOULD NOT WORK.

有人对此有指导吗?

你似乎想要 dense_rank():

select
    emp,
    doc,
    date,
    dense_rank() over(partition by emp order by date) id
from mytable

这对具有相同 emp 的组内的行进行编号,并且仅在 date 更改时递增,没有间隙。

如果您的情况下性能不是问题,您可以尝试某事。喜欢:

SELECT tx.EMP, tx.DOC, tx.DATE, y.ID
   FROM table_xxx tx
     join y on tx.EMP = y.EMP and tx.DOC = y.DOC
(SELECT EMP, DOC, ROW_NUMBER() OVER (PARTITION BY EMP ORDER BY DOC) ID
   FROM(SELECT EMP, DOC FROM table_xxx GROUP BY EMP, DOC)x)y