如何查询以基于行的 MIN 和 MAX 服务日期提取所有数据?

Dav*_*vid 6 oracle query

我对 Oracle SQL 非常陌生,尤其是在 Pentaho 报告生成器中。它可以让你做一些事情并阻止其他人。PL/SQL 不可用,因此我必须在查询中执行此操作。

我需要能够为他们MIN(service_date)和他们的MAX(service_date). 下面是表格数据和我想得到的结果。

表格数据

client_id | service_date  | other_stuff 
--------------------------------------- 
        1 | 2/24/2010     | Bob
        1 | 3/23/2010     | Jane
        1 | 4/23/2010     | Sam
        2 | 1/1/2000      | Julie
        2 | 2/2/2000      | Tina
        3 | 3/28/2005     | D'Shaun
        3 | 4/27/2005     | Leisha
        3 | 5/29/2005     | Tonay
Run Code Online (Sandbox Code Playgroud)

结果数据

client_id | service_date | other_stuff
--------------------------------------
        1 | 2/24/2010     | Bob
        1 | 4/23/2010     | Sam
        2 | 1/1/2000      | Julie
        2 | 2/2/2000      | Tina
        3 | 3/28/2005     | D'Shaun
        3 | 5/29/2005     | Tonay
Run Code Online (Sandbox Code Playgroud)

小智 9

可能还有其他更好的方法,但以下对您有用吗?

select client_id
      ,service_date
      ,other_stuff
  from (
        select client_id
              ,service_date
              ,other_stuff
              ,row_number() over (partition by client_id order by service_date) rn_min
              ,row_number() over (partition by client_id order by service_date desc) rn_max
          from tbl
       )
 where (rn_min = 1 OR rn_max = 1) ;
Run Code Online (Sandbox Code Playgroud)