【问题标题】:Mysql: showing order number per customer for each orderMysql:为每个订单显示每个客户的订单号
【发布时间】:2016-11-24 06:43:27
【问题描述】:

我有一张表列出 order_id、order_date 和 user_id。

我可以毫无问题地检索每个客户下了多少订单并将其显示在 order_id 旁边。但是,我一直在尝试未成功的是在每个 order_id 旁边显示每个客户的第 n 个订单值。

SELECT order.id,
       order.user_id,
       date(from_unixtime(order.created_date))
       COUNT(order2.id)
FROM order order
JOIN order order2
           ON order2.user_id = order.user_id
AND order2.created_date <= order.created_date
GROUP
BY order.user_id,
   date(from_unixtime(order.created_date)),
   order.id
ORDER
BY order.user_id,
   date(from_unixtime(order.created_date)),
   order.id;

这给了我每个用户每个订单的订单总数,而不是第 n 个值。

结果应该是这样的:

created_date  order_id  user_id  order_number
2016-11-21     234        12       2
2016-10-15     123        16       1
2016-10-03     234        12       1

非常感谢!

【问题讨论】:

  • 能发一下表结构吗? n-th order value 是什么意思?
  • 对于每个用户,按升序计算他的多少个顺序。如果用户有3个订单,最早的订单返回1,第二个订单返回2,第三个订单返回3。
  • 使用 AND order2.id
  • @89ZiNws 您提供了预期的结果。请提供表格示例数据。
  • @Viki888 表格样本与结果相同减去order_number

标签: mysql


【解决方案1】:

好吧,您可以添加另一个连接并稍微更改第一个:

SELECT order.id,
       order.user_id,
       date(from_unixtime(order.created_date))
       COUNT(distinct order3.id) - COUNT(distinct order2.id)
FROM order order
JOIN order order2
           ON order2.user_id = order.user_id
AND order2.created_date > order.created_date
JOIN order order3
           ON order2.user_id = order.user_id
GROUP
BY order.user_id,
   date(from_unixtime(order.created_date)),
   order.id
ORDER
BY order.user_id,
   date(from_unixtime(order.created_date)),
   order.id;

【讨论】:

  • 但想警告您,在 self 上连接表是一种非常糟糕的方法,您可以将其用作解决方法、快速修复或在非常小的表上
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-16
  • 2023-03-13
  • 1970-01-01
相关资源
最近更新 更多