繁体   English   中英

如何在MySQL中查询每一行的序号索引

[英]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   |

这意味着:

  • #1订单是Dave的第一订单
  • 2号订单是Jim的1号订单...
  • #5是吉姆的第二个命令

等等!
如何在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM