Postgresql:在select中生成增量ID

时间:2014-02-11 14:44:44

标签: sql postgresql postgis

我有一个表格(用户,日,从,到)。对于我对路由的定义,所有带密钥的条目(用户,日)都在路由中。我想为每条路线创建一个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) 

因为它是由不同的用户制作的。

1 个答案:

答案 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

Fiddle