子查询最大日期

时间:2018-01-03 07:12:55

标签: sql oracle greatest-n-per-group

我有5张桌子: 员工,person_analys,标准,分配和薪酬

我想表明:

employee_id and full_name from employee,
date_from and date_to from person_analys,
segment1 and segment2 from criteria,
efective_end_date from assignment,
salary from pay

我想显示每个employee_id,并且只在1天内显示1行 并取最后一个日期(来自effective_end_date的最长日期)。 date_from和date_to描述为白天。

示例:

employee_id    full_name    date_from    date_to     segment1    segment2    effective_end_date    salary
11111        aaa        01-Jan-17    01-Jan-17    11:00        17:00        02-Jan-17        1000
11111        aaa        01-Jan-17    01-Jan-17    11:00        17:00        01-Jan-17        2000

我希望每位员工每天只显示一行,每天根据最大有效结束日期显示如下:

employee_id    full_name    date_from    date_to     segment1    segment2    effective_end_date    salary
11111        aaa        01-Jan-17    01-Jan-17    11:00        17:00        02-Jan-17        1000

请帮帮我。 我已经尝试了但where条件不起作用仍然显示所有数据。 谢谢你:))

1 个答案:

答案 0 :(得分:1)

FROM

后面使用子查询
with join_of_tables as (
  select TO_DATE(effective_end_date as date, 'DD-MON-YY') as effective_end_date, ...
  -- here you should have a join of your tables
)
select e.*
from join_of_tables e
join (
    select employee_id, max(effective_end_date) max_effective_end_date   
    from join_of_tables
    group by employee_id
) t on e.employee_id= t.employee_id and
       e.effective_end_date = t.max_effective_end_date   

如果effective_end_date的数据类型为varchar2,则应首先将其转换为日期(在我的示例中为TO_DATE函数)。