[英]How do I return single orderid having same rank?
我有以下输出:
订单号 | 时间 | 状态 | order_rank |
---|---|---|---|
1 | 10.15 | 制造商 | 1 |
1 | 10.15 | 发表 | 1 |
2 | 12.10 | 采摘 | 1 |
2 | 12.10 | 制造商 | 1 |
在这里,我已将订单 ID 排到最新时间并将条件放在 where 子句“where order_rank = 1”中,但我想为一个 orderjobid 返回单个条目,即对于 orderid 1 我想返回已交付状态条目对于 orderid 2,我想要 mfr 状态条目等。
这只是一个示例数据,我有超过 1000 个 orderid,如何返回相同排名的单个条目?
假设您的代码如下所示:
SELECT * FROM (
SELECT
order_id,
time,
state,
RANK() over (partition by order_id order by time) as order_rank
FROM VALUES
(1,'10.15','mfr'),
(1,'10.15','delivered'),
(2,'12.10','picked'),
(2,'12.10','mfr')
v(order_id, time, state)
)
WHERE order_rank = 1;
扩展你的排名,不仅包括时间,还包括状态的表达,比如。
Order time desc,
case state when 'picked' then 1
When 'mfr' then 2
When 'delivered' then 3
...
End asc
你可以尝试row_number() over (partition by Orderid order by State)
并选择第一个
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.