Database 从col1和col2列中选择不同的值,并按col3排序

Database 从col1和col2列中选择不同的值,并按col3排序,database,oracle,Database,Oracle,我很抱歉,如果这个问题是noobish-我是SQL新手,但我已经在谷歌上搜索了一些,由于SQL知识有限,没有找到合适的解决方案,或者没有我能理解的解决方案 我试图得到Col1和Col2对Col3排序的不同值,这似乎很容易做到: select distinct Col1, Col2, Col3 from Table order by Col3 desc 我还需要去掉Col3,还需要获得重复的COCL1和Col2对的rir,并按Col3对它们进行排序,但当尝试在子查询上选择distinct时,顺序

我很抱歉,如果这个问题是noobish-我是SQL新手,但我已经在谷歌上搜索了一些,由于SQL知识有限,没有找到合适的解决方案,或者没有我能理解的解决方案

我试图得到Col1和Col2对Col3排序的不同值,这似乎很容易做到:

select distinct Col1, Col2, Col3 from Table order by Col3 desc
我还需要去掉Col3,还需要获得重复的COCL1和Col2对的rir,并按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
你可以写:

select distinct Col1, Col2 from Table order by Col3

您不需要选择用于订购的列。

我们在评论中进行了相当长的讨论,我仍然不完全清楚您需要什么,但我希望这两个选项中的一个能让您接近

第一个查询将生成您似乎想要的内容—没有复制行的原始列表。但是,它与示例输出不同,因为存在无序值。例如:

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
HOST_01     XR1
HOST_02     XR2
HOST_06     YR1
HOST_10     IT0

第二个选项仅使用maxcol3 per col1/col2。这与示例输出非常匹配,删除了重复的行

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_02     XR2
HOST_06     YR1
HOST_10     IT0
HOST_06     YR1
HOST_10     IT0
HOST_06     YR1
HOST_01     XR1
HOST_02     XR2
HOST_06     YR1
HOST_10     IT0

而且

您可以从第二个查询中删除外部distinct select col1,col2 from subquery…,但是在输出中使用col3有什么问题吗?嗨,Joe,col3的问题是col1和col2值重复。我需要去掉这些,并按照col3对其排序这就是为什么我尝试使用double distinct,但第二个对数据进行重新排序,所以对于某些COL1/COL2组合,col3有多个值?如果是这样,您如何知道要按哪个COL3值排序?每个COL3有多个col1和col2值,COL3包含数字。我需要按col3对行进行排序。然后得到不同行的col1,col2,按col3排序……如果我理解正确,那么在col3周围加一个max,并按col1/col2分组将允许您按col3排序,同时仍然返回不同的col1/col2组合。如果我不理解你,那么请用一些样本数据更新你的问题。你可以使用DISTINCT.Hi@Joe,谢谢你的输入,但情况也不是这样。然而,我找到了另一种方法来获取我需要的信息。谢谢你抽出时间!