如何更新n行分区中的日期列?

时间:2016-11-26 05:06:01

标签: sql postgresql datetime

我正在尝试更新我的日期字段 表结构如下:

AsyncTask

如何更新前10个不同日期的记录,后10个不同日期的记录等等?

2 个答案:

答案 0 :(得分:1)

UPDATE tbl t
SET   "date" = date '2016-11-14' + sub.rn::int / 10  -- integer division
FROM  (
   SELECT id, row_number() OVER (ORDER BY id) AS rn
   FROM   tbl
   ) sub
WHERE t.id =  sub.id;

子查询计算无间隙行号,因为您的问题中没有任何内容表明id实际上保证没有间隙。

您只需向实际integer添加date即可添加天数。 (在我的第一个版本中忘记了演员int。)

使用timestamp代替:

timestamp '2016-11-14' + interval '1 day' * (sub.rn / 10)

答案 1 :(得分:0)

您可以使用CASE

  UPDATE yourTable
  SET "date" = CASE WHEN id <= 10 then '2016-11-01'::timestamp 
                    WHEN id <= 20 then '2016-11-02'::timestamp 
                    ....
                    WHEN id <= 100 then '2016-11-10'::timestamp 
               END;