【发布时间】:2019-09-13 09:46:59
【问题描述】:
我正在使用 sql oracle。
我有一张带有 emplid 和 effdt 的表格。我想在我的选择中添加一个给出 current_flag 的列。我认为这个查询会做:
select emplid,effdt,
CASE ROW_NUMBER() OVER(PARTITION BY emplid order by effdt desc)
WHEN 1 THEN 'Y'
ELSE 'N'
END CURRENT_FLAG
from job_table
问题是我想要一个 'Y' 表示 最高 effdt 的 emplid,但 effdt 。
例子:
emplid effdt
x 01/01/2014
x 01/01/2015
x 01/01/2016
y 01/01/2014
y 01/01/2015
y 01/01/2016
y 01/01/2020
我的查询是“Y”
适用于 2014 年 1 月 1 日的 X 和
2020 年 1 月 1 日为 y。
但我想要结果:
emplid effdt current_flag
x 01/01/2014 N
x 01/01/2015 N
x 01/01/2016 Y
y 01/01/2014 N
y 01/01/2015 N
y 01/01/2016 Y
y 01/01/2020 N
因为 01/01/2020 不是当前的,而是未来的。 或者可能是 2020 年 1 月 1 日日期 Y 的“F”,以表明它在未来。
我想在我的分区上放置一个过滤器effdt < sysdate,但我不知道怎么做。
【问题讨论】:
-
你不能试试
WHEN 1 and effdt < sysdate THEN 'Y'
标签: sql oracle window-functions