Database 从col1和col2列中选择不同的值,并按col3排序
我很抱歉,如果这个问题是noobish-我是SQL新手,但我已经在谷歌上搜索了一些,由于SQL知识有限,没有找到合适的解决方案,或者没有我能理解的解决方案 我试图得到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时,顺序
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,谢谢你的输入,但情况也不是这样。然而,我找到了另一种方法来获取我需要的信息。谢谢你抽出时间!