我有一个表,看起来像这样:
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
...所以我的代码看起来像这样:
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
如有任何帮助,将不胜感激,谢谢!
发布于 2018-08-16 00:44:08
使用correlated subquery计算有多少行具有较小的日期值:
UPDATE temp_table
SET ID = (SELECT count(*)
FROM temp_table AS t2
WHERE t2.DATE <= temp_table.DATE);或者,使用正确的ORDER BY将行插入到临时表中,则rowid值是正确的。
https://stackoverflow.com/questions/51862568
复制相似问题