需要报告客户订单的最新状态,以及每个客户的每个订单状态的计数[关闭]
Posted
技术标签:
【中文标题】需要报告客户订单的最新状态,以及每个客户的每个订单状态的计数[关闭]【英文标题】:Need to report latest status of a customer order, as well as the count of each order status for each customer [closed] 【发布时间】:2021-03-13 22:39:33 【问题描述】:数据库布局:
问题基本上总结了我需要返回的内容。
每个客户有多个订单,但我需要报告最新订单的状态。
我还需要为每个客户的订单('Cancelled''Disputed'和'On Hold')制作三列订单状态计数。
如果有人能指出我正确的方向,那将非常有帮助。
【问题讨论】:
欢迎来到 Stack Overflow。你都尝试了些什么?什么不按您期望的方式工作?提供一些您尝试过的代码(即使它不起作用)以及更具体的问题(例如,“它返回最大值,而不是最新值”)将使社区更容易做出响应。 【参考方案1】:您可以使用窗口函数和条件聚合:
select customernumber,
max(case when rn = 1 then status end) as last_order_status,
sum(status = 'Cancelled') cnt_cancelled,
sum(status = 'Disputed' ) cnt_disputed,
sum(status = 'On Hold' ) cnt_on_hold
from (
select o.*,
row_number() over(partition by customernumber order by orderdate desc) rn
from orders o
) t
group by customernumber
请注意,row_number()
仅在 mysql 8.0 中可用。在早期版本中,您可以使用 correlatead 子查询来检索最新状态:
select customernumber,
(select o1.status from orders o1 where o1.customernumber = o.customernumber order by o1.orderdate desc limit 1) as last_order_status,
sum(status = 'Cancelled') cnt_cancelled,
sum(status = 'Disputed' ) cnt_disputed,
sum(status = 'On Hold' ) cnt_on_hold
from orders o
group by customernumber
【讨论】:
以上是关于需要报告客户订单的最新状态,以及每个客户的每个订单状态的计数[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何获取客户的用户 ID 以及他们使用聚合或窗口函数下的每个订单?