我在Oracle DB的表中有几列,一个是varchar2类型,而另一个是date。我想检索不同的有序数据
以下是以下查询的输出
select CS_ID,CS_Date from CSM order by CS_Date;
产生:
CS_ID CS_Date
CS0000000001 29/03/15 14:23:25.872000000
CS0000000001 29/03/15 14:23:30.546000000
CS0000000001 29/03/15 14:23:30.577000000
CS0000000001 29/03/15 14:24:54.331000000
CS0000000001 29/03/15 14:39:51.881000000
CS0000000001 29/03/15 14:44:18.306000000
CS0000000001 29/03/15 14:44:27.372000000
CS0000000002 29/03/15 15:38:40.657000000
CS0000000003 29/03/15 18:41:15.409000000
CS0000000004 29/03/15 19:31:45.614000000
添加distinct后,输出如下。添加不同的
后,不会保持有序select distinct CS_ID from (
select CS_ID,CS_Date from CSM order by CS_Date
) v
产生:
CS_ID
CS0000000002
CS0000000004
CS0000000003
CS0000000001
我期待以下输出
CS_ID
CS0000000001
CS0000000002
CS0000000003
CS0000000004
请问您如何使用distinct子句维护订单?
答案 0 :(得分:2)
这会按照最早 cs_id
的顺序列出每个cs_date
。
select cs_id
from(
select cs_id,
row_number() over(partition by cs_id order by cs_date) as rn,
row_number() over(order by cs_date) as rn2
from csm
)
where rn = 1
order by rn2
(同样,只显示每个cs_id
一次,用distinct
达到你想要的效果
答案 1 :(得分:0)
select cs_id
from (select cs_id, min(cs_date) as min_cs_date
from csm
group by cs_id)
order by min_s_date