我有一个看起来像这样的表:
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。
任何帮助将不胜感激,谢谢!
答案 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
的值正确。