0

我想知道是否有人有解决这个问题的方法。我正在尝试返回 Worker 的终止日期在 2 个月前的月份的结果,因此如果报告在 10 月运行,我希望看到终止日期在 8 月的人。

目前我能想到的最好的是

其中月(saw_4) = 月(SYSDATE)-2

但这不适用于 1 月和 2 月的 SYSDATE。(而且它似乎不想在 Oracle OTBI 上运行,所以我认为我会在 BI 中运行)

SELECT "Worker"."Person Number" AS saw_0, 
"Worker"."Employee Last Name" AS saw_1, 
"Worker"."Employee First Name" AS saw_2, 
"Worker"."Primary National Identifier Number" AS saw_3, 
"Worker"."Termination Date" AS saw_4 
FROM "Workforce Management - Work Relationship Real Time" 
Where Month(saw_4) = month(SYSDATE)-2

感激地收到任何帮助。

4

2 回答 2

0

我倾向于把它写成:

where termination_date >= trunc(add_months(sysdate, -2), 'mm') and
      termination_date < trunc(add_months(sysdate, -1), 'mm') 

据推测,termination_date没有时间成分。但是,唉,在 Oracle 中,date数据类型总是有一个。因此,作为通用解决方案,这似乎更安全。

于 2019-10-29T13:15:56.417 回答
0

这可能是这样的:

where termination_date between trunc(add_months(sysdate, -2), 'mm')
                           and last_day(add_months(sysdate, -2))

为什么,如果有更简单的

where to_char(termination_date, 'yyyymm') = to_char(add_months(sysdate, -2), 'yyyymm')

因为这会导致可能的索引termination_date不可(除非你有一个基于函数的索引,而人们通常没有)。

于 2019-10-29T12:59:54.110 回答