我很抱歉,如果这个问题是noobish - 我是SQL的新手,但是我已经进行了一些谷歌搜索并找不到合适的解决方案(或者由于SQL知识有限而无法理解)
我正在尝试获取按Col1
排序的对Col2
和Col3
的不同值,这似乎很容易实现:
select distinct Col1, Col2, Col3 from Table order by Col3 desc
我还需要摆脱Col3
并获得重复的Col1和Col2对,并按Col3
排序,但是当尝试在子查询中选择distinct时,顺序是改变。
select distinct Col1, Col2 from (select distinct Col1, Col2, Col3 from Table order by Col3)
有解决方法吗?
如何获得Col1
,Col2
的明确值,但按Col3
排序?
以下是我处理的一些数据:
COL1 COL2 COL3
HOST_01 XR1 6387900000000
HOST_01 XR1 6280600000000
HOST_01 XR1 6237600000000
HOST_01 XR1 6194700000000
HOST_01 XR1 6080200000000
HOST_01 XR1 6058800000000
HOST_02 XR2 1134300000000
HOST_02 XR2 1132200000000
HOST_02 XR2 1130600000000
HOST_02 XR2 1128600000000
HOST_02 XR2 1128000000000
HOST_02 XR2 1121900000000
HOST_06 YR1 1120100000000
HOST_02 XR2 1113500000000
HOST_06 YR1 1072100000000
HOST_06 YR1 1050600000000
HOST_10 IT0 1050600000000
HOST_06 YR1 979010000000
HOST_06 YR1 971750000000
HOST_06 YR1 952110000000
HOST_06 YR1 930640000000
HOST_06 YR1 926500000000
HOST_10 IT0 926500000000
HOST_06 YR1 922210000000
我需要输出看起来像:
COL1 COL2
HOST_01 XR1
HOST_02 XR2
HOST_06 YR1
HOST_10 IT0
HOST_06 YR1
HOST_10 IT0
答案 0 :(得分:0)
你可以写:
select distinct Col1, Col2 from Table order by Col3
您无需选择用于订购的列。
答案 1 :(得分:0)
我们在评论中已经进行了很长时间的讨论,而且我仍然没有100%明确你需要什么,但我希望这两个选项中的一个可以让你接近。
第一个查询将生成您似乎要求的内容 - 没有复制行的原始列表。但是,它与您的示例输出不同,因为存在无序值。例如:
HOST_06 YR1 1120100000000
HOST_02 XR2 1113500000000
HOST_06 YR1 1072100000000
这是SQL:
select
col1,col2
from
(
select
col1,col2,col3,
lag(col1,1,0) over(order by col3 desc) last_col1,
lag(col2,1,0) over(order by col3 desc) last_col2,
rownum row_num
from
test
)
where
col1 != last_col1 or col2 != last_col2
order by
row_num
输出:
HOST_01 XR1
HOST_02 XR2
HOST_06 YR1
HOST_02 XR2
HOST_06 YR1
HOST_10 IT0
HOST_06 YR1
HOST_10 IT0
HOST_06 YR1
第二个选项只使用每个col1 / col2的max(col3)。这与您的示例输出非常匹配,删除了重复的行。
SQL
select
col1,col2
from
(
select col1,col2,max(col3)
from test
group by col1,col2
order by 3 desc
)
输出:
HOST_01 XR1
HOST_02 XR2
HOST_06 YR1
HOST_10 IT0