基于变量的增量值

时间:2018-08-15 16:20:54

标签: sqlite

我有一个看起来像这样的表:

DATE         user_id  amount_spent
2018-04-16    xxxx     0.99
2018-05-16    xcxc     5.10
2018-05-18    xdxd     4.99
2018-04-17    xvxv     7.00
...

我需要添加另一列名为ID的列,其范围为1 to n,并指示每个用户购买的位置。 1是第一次购买的订单,n是最后购买的订单。

因此它将输出类似的内容:

DATE         user_id  amount_spent   ID
2018-04-16    xxxx     0.99          1
2018-05-16    xcxc     5.10          2
2018-05-18    xdxd     4.99          4
2018-04-17    xvxv     7.00          3
...

所以我的代码看起来像这样的atm:

    ALTER TABLE temp_table
    ADD ID VARCHAR;

  UPDATE temp_table SET ID = (SELECT * FROM (WITH RECURSIVE
  cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt WHERE x< (select count(*) from temp_table))
SELECT x FROM cnt));

但是随后ID与日期不相关,并且每ID仅输出1。

任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:1)

使用correlated subquery来计算具有较小日期值的行:

UPDATE temp_table
SET ID = (SELECT count(*)
          FROM temp_table AS t2
          WHERE t2.DATE <= temp_table.DATE);

或者,使用正确的ORDER BY将行插入临时表中,然后rowid的值正确。