我有一个表格(用户,日,从,到)。对于我对路由的定义,所有带密钥的条目(用户,日)都在路由中。我想为每条路线创建一个id,以便
条目
(0001,1970/01/01,A,B),(0001,1970/01/01,B,C),(0001,1970/01/01,C,D)
变成
(0001,1970/01/01,A,B,1),(0001,1970/01/01,B,C,1),(0001,1970/01/01,C,D,1)
而
(0002,1970/01/01,A,B)
将变成
(0002,1970/01/01,A,B,2)
因为它是由不同的用户制作的。
答案 0 :(得分:0)
最简单的解决方案是在子查询中使用窗口函数来获取每对用户+日期的id,然后再加入。
SELECT
r.ruser
,r.rdate
,r.rfrom
,r.rto
,q.row_n
FROM
routes AS r
JOIN (SELECT DISTINCT
r.ruser
,r.rdate
,dense_rank() OVER (ORDER BY r.ruser ,r.rdate) AS row_n
FROM
routes AS r
) AS q
ON q.ruser = r.ruser AND q.rdate = r.rdate
ORDER BY
r.ruser
,r.rdate