[英]How to query the ordinal index of each row in MySQL
假设我有这张桌子:
| Order ID | User | Order Date |
-----------------------------------
| 1 | Dave | 03/01/2017 |
| 2 | Jim | 03/09/2017 |
| 3 | John | 03/15/2017 |
| 4 | John | 03/18/2017 |
| 5 | Jim | 03/18/2017 |
| 6 | Dave | 03/30/2017 |
| 7 | John | 04/04/2017 |
| 8 | Jim | 04/16/2017 |
我想要做的事情是再增加一列以指示每个人的第n个顺序,因为我需要分析用户的重复行为。 所以输出应该是这样的:
| Order ID | User | Order Date | n-th |
-----------------------------------------
| 1 | Dave | 03/01/2017 | 1 |
| 2 | Jim | 03/09/2017 | 1 |
| 3 | John | 03/15/2017 | 1 |
| 4 | John | 03/18/2017 | 2 |
| 5 | Jim | 03/18/2017 | 2 |
| 6 | Dave | 03/30/2017 | 2 |
| 7 | John | 04/04/2017 | 3 |
| 8 | Jim | 04/16/2017 | 3 |
这意味着:
等等!
如何在SQL中使用原始查询获取此信息?
谢谢。
在大多数数据库中,您将使用row_number()
。 在MySQL中,最好使用变量来完成此操作:
select t.*,
(@rn := if(@u = user, @rn + 1,
if(@u := user, 1, 1)
)
) as nth
from t cross join
(select @u := '', @rn := 0) params
order by user, orderdate;
您也可以使用相关子查询来表述此查询,但是使用变量的方法应具有更好的性能。
若要将数据恢复为原始格式,请使用以上作为子查询,然后按订单ID进行排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.