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
我有一个选择 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