【发布时间】:2022-01-09 12:39:46
【问题描述】:
我已更改问题以使其更易于理解
我创建了一个查询来获取以下带有日期的输出:
PERSON_nUMBER base_element_name effective_start_date effective_end_date Value
11 Health 2021-11-21 4712-12-31 5.5
11 Health 2021-10-18 2021-11-20 5.5
12 Health 2021-11-11 4712-12-31 0
12 Health 2021-11-01 2021-11-10 5.5
13 Health 2021-11-01 2021-11-09 6
14 Health 2021-11-10 2021-11-19 6
14 Health 2021-11-20 2021-11-30 6
14 Health 2021-12-01 2021-12-05 5
14 Health 2021-12-06 4712-12-31 5
15 Health 2021-11-10 2021-11-19 6
15 Health 2021-11-20 2021-11-30 6
15 Health 2021-12-01 2021-12-05 6
15 Health 2021-12-06 2021-12-15 5
15 Health 2021-12-16 4712-12-31 5
我将参数传递为 01-11-2021 和 30-11-2021
select
petf.person_number
petf.base_element_name,
to_char(peef.effective_start_date,'YYYY-MM-DD') effective_start_date ,
to_char(peef.effective_end_date,'YYYY-MM-DD') effective_end_date,
pivf.value
from pay_element_types_f petf ,
pay_input_values_f pivf,
per_all_elementries_f peef
where pivf.element_type_id = petf.element_type_id
AND petf.base_element_name in ('Health')
and peef.element_entry_id= pivf.element_entry_id
and peef.effective_start_date between :from_date and :to_date
如何调整上述查询,以便如果值列(如 person_number 12)发生变化,那么这两行应该输出;如果同一员工的两行内没有变化,例如 person_number 11,则只应选择最新的行。
预期的输出是 -
PERSON_nUMBER base_element_name effective_start_date Value
11 Health 2021-11-21 5.5
12 ~Health 2021-11-11 0
12 Health 2021-11-01 5.5
13 Health 2021-11-01 6
14 Health 2021-11-10 6
14 ~Health 2021-12-01 5
15 Health 2021-11-10 6
15 ~Health 2021-12-06 5
案例
- 如果 person_number 12 的值从 5.5 变为 0,那么这两行都应该出现,并且最新的一个 base_element_name 应该添加“~”。
- 如果仅向员工标记了一次健康并且是结束日期,则应仅显示该行。
- 如果日期范围内的值没有变化,那么最新的行应该是 example-11
- 对于 person#14 和 15 ,第一个生效开始日期应该是“最新”更改或最后更改值的第一次出现生效开始日期
【问题讨论】:
标签: sql oracle oracle-sqldeveloper