首页 新闻 赞助 找找看

oracle分组后筛选数据

0
悬赏园豆:100 [已解决问题] 解决于 2014-05-20 14:40

我目前有一个表,需要根据时间排序,然后取出当某字段为true时的前N条数据。

例如:

date              name    status
2014-01-01      0       FALSE
2014-01-02      0       FALSE
2014-01-03      0       FALSE
2014-01-04      0       FALSE
2014-01-05      0       TRUE
2014-01-06      0       FALSE
2014-01-01      1       FALSE
2014-01-02      1       FALSE
2014-01-03      1       FALSE
2014-01-04      1       TRUE
2014-01-05      1       FALSE
2014-01-06      1       FALSE

 

根据name进行分组,分组后根据date进行排序,取当status为true的前N条数据。

预期结果为:

date              name    status
2014-01-01      0       FALSE
2014-01-02      0       FALSE
2014-01-03      0       FALSE
2014-01-04      0       FALSE
2014-01-05      0       TRUE
2014-01-01      1       FALSE
2014-01-02      1       FALSE
2014-01-03      1       FALSE
2014-01-04      1       TRUE

 

 

求ORACLE 应该怎么写???

c00164959的主页 c00164959 | 初学一级 | 园豆:26
提问于:2014-05-16 17:51
< >
分享
最佳答案
1
select t.date, t.name, t.status from TABLE1 t
inner join 
(select Min(date) date, name from TABLE1 where status = 'TRUE' group by name) tt
on t.date <= tt.date and t.name = tt.name 
order by t.name,t.date
收获园豆:100
刘宏玺 | 专家六级 |园豆:14020 | 2014-05-17 01:40
其他回答(4)
0

看楼上的

贺臣 | 园豆:307 (菜鸟二级) | 2014-05-17 08:36
0

1L正解!

random_2013 | 园豆:202 (菜鸟二级) | 2014-05-17 18:13
0
1 select * from (select date,name,status,row_number() over(partition by name order by date ) as rId from tbl where status='true' ) where rId<10
会飞的金鱼 | 园豆:881 (小虾三级) | 2014-05-18 10:14
0

1L 

Zery | 园豆:6151 (大侠五级) | 2014-05-18 13:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册