需要根据值的顺序获取结果行
Posted
技术标签:
【中文标题】需要根据值的顺序获取结果行【英文标题】:Need to fetch result row on basis of order of value 【发布时间】:2022-01-20 14:14:17 【问题描述】:Item No Date Item Type Item No Date Item Type
12345 12/17/2021 High 12345 12/17/2021 HIGH
23456 12/17/2021 Low 23456 12/17/2021 Low
78901 12/17/2021 Out 78901 12/17/2021 Out
12345 11/17/2021 Low 12345 11/17/2021 Low
23456 11/17/2021 High 23456 11/17/2021 High
78901 11/17/2021 Low 78901 11/17/2021 Low
12345 12/17/2021 HIGH
23456 12/17/2021 High Result Table
78901 12/17/2021 Low
78901 12/17/2021 High
Source table
我在右侧有源表,在左侧需要结果表。结果基于“项目类型”列:- Out, High , Low 。如果我有 2 行具有不同的“项目类型” 那么它应该在 Out>Low>High 的基础上只选择一个值。 例如:- 如果“ITEM NO”的值为 12345 并且它具有 High、Low 和 High,那么它应该取值为 High。 如果它只有 Low 和 High ,那么它应该把它当作 Low ,如果它只有 High ,它将把它当作 High 。 请帮助我查询,我如何实现它。
【问题讨论】:
【参考方案1】:我会根据项目编号和日期组合对行进行排名,然后仅查询“第一个”:
SELECT item_no, date, item_type
FROM (SELECT item_no, date, item_type
RANK() OVER (PARTITION BY item_no, date
ORDER BY CASE item_type WHEN 'Out' THEN 1
WHEN 'Low' THEN 2
WHEN 'High' THEN 3
END) AS rk
FROM my_table) t
WHERE rk = 1
【讨论】:
感谢 Mureinik,假设我有类似的情况,例如 SELECT s.item_no, d.date, e.item_type FROM (SELECT s.item_no, d.date, e.item_type RANK() OVER (PARTITION BY s.item_no, d.date ORDER BY CASE e.item_type WHEN 'Out' THEN 1 WHEN 'Low' THEN 2 WHEN 'High' THEN 3 END) AS rk FROM table1 s, table d, table e) t WHERE rk = 1 ...我怎么能实现它,我有点新谢谢以上是关于需要根据值的顺序获取结果行的主要内容,如果未能解决你的问题,请参考以下文章