首页 > 解决方案 > 根据mysql中的用户ID获取购买号

问题描述

我正在尝试获取第四列,在其中获取该用户的购买编号,我有以下数据:

user   date          purchase_id
a      01-01-2018    1
b      02-01-2018    2
a      02-01-2018    3
a      03-01-2018    4
b      04-01-2018    5
a      04-01-2018    6

并想得到这样的东西:

user   date          purchase_id  purchase_order
a      01-01-2018    1            1
b      02-01-2018    2            1
a      02-01-2018    3            2
a      03-01-2018    4            3
b      04-01-2018    5            2
a      04-01-2018    6            4

这样做的最终用途是建立一个群组分析来检查用户保留率。谢谢

标签: mysqlsqldatabasedatewindow-functions

解决方案


您似乎正在寻找ROW_NUMBER()(在 MySQL 8.0 中可用)。此窗口函数可用于对共享相同的组内的记录进行排名user

SELECT
    user,
    date,
    purchase_id,
    ROW_NUMBER() OVER(PARTITION BY user ORDER BY purchase_id ) purchase_order
FROM mytable

注意:目前还不清楚您要使用哪一列进行排序。它可能是purchase_id(如上面的查询所示),或者可能date是:您可以根据您的要求更改查询。

DB Fiddle 上的演示

| user | date       | purchase_id | purchase_order |
| ---- | ---------- | ----------- | -------------- |
| a    | 2018-01-01 | 1           | 1              |
| a    | 2018-01-02 | 3           | 2              |
| a    | 2018-01-03 | 4           | 3              |
| a    | 2018-01-04 | 6           | 4              |
| b    | 2018-01-02 | 2           | 1              |
| b    | 2018-01-04 | 5           | 2              |

推荐阅读