使用过滤器获取分区数据的最小值和最大值

时间:2016-09-28 09:49:52

标签: sql oracle oracle10g window-functions

我在查询中发现了这个问题:(抱歉,我会尝试简化表格定义并缩短细节。如果您还需要更多信息,请告诉我。)

我有(ID, date, status)的表格。 ID是FK,date是日期,status15之间的int值。 datestatus都允许空值。也允许重复的值。

我需要什么: 为每个ID提取一行,min(date)状态为12min(date)的{​​{1}} status (仅),2 ...

我完全失去了......我试图使用

max(status)

所以,问题是:这是正确的吗?如何只选择我想要的SELECT ID, min(date) over (partition by(status)) ?? as min_12_date, min(date) over (partition by(status)) ?? as min_2_date, max(status) as max_status FROM table group by ID

1 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,您不需要解析功能。您只需要条件聚合:

select id,
       min(case when status in (1, 2) then date end) as min_12_date,
       min(case when status = 2 then date end) as min_2_date,
       max(status) as max_status
  from tbl
 group by id