【发布时间】:2019-01-24 16:19:36
【问题描述】:
我有一个员工历史记录表,其中包含状态日期、状态和员工 ID。状态日期不在同一日期,有时可能会持续几个月而不更新。我需要创建一个报告,每月创建员工状态的每月快照。
目前,我正在选择 sysdate 月份开始之前的最大状态日期,并通过从查询中一次减去一个月来重复此查询,然后进行联合以合并所有这些日期。
SELECT id,
status_date,
status,
(trunc(sysdate, 'month')) AS Activity_Month
FROM empl_hist as e1 join
(SELECT id, max(status_date) AS max_date, status_date FROM empl_hist
WHERE status_date <= (trunc(sysdate, 'month')) e2
on e1.id = e2.id and e1.status_date = e2.status_date
UNION ALL
SELECT id,
status_date,
status,
(trunc(add_months(sysdate,-1), 'month')) AS Activity_Month,
FROM empl_hist as e1 join
(SELECT id, max(status_date) AS max_date, status_date FROM empl_hist
WHERE status_date <= (trunc(add_months(sysdate,-1), 'month')) e2
on e1.id = e2.id and e1.status_date = e2.status_date
我需要这份过去 24 个月的报告,似乎应该有更好的方法来做这件事,而不是做 23 个工会。
【问题讨论】:
-
样本数据和预期结果会有所帮助。
-
这是一个无效的查询。
e2.status_date不存在。你打算e2.max_date吗? -
抱歉,已更正该错误