我有一个包含日期值、会计年度、会计年度的表
DATE_VALUE FISCAL_WEEK FISCAL_YEAR
24-DEC-21 52 2021
25-DEC-21 52 2021
26-DEC-21 52 2021
27-DEC-21 53 2021
28-DEC-21 53 2021
29-DEC-21 53 2021
30-DEC-21 53 2021
31-DEC-21 53 2021
01-JAN-22 53 2021
02-JAN-22 53 2021
03-JAN-22 1 2022
04-JAN-22 1 2022
05-JAN-22 1 2022
06-JAN-22 1 2022
07-JAN-22 1 2022
08-JAN-22 1 2022
09-JAN-22 1 2022
10-JAN-22 2 2022
11-JAN-22 2 2022
12-JAN-22 2 2022
13-JAN-22 2 2022
14-JAN-22 2 2022
该表涵盖整个2021和2022财年
我想取得本周之前的前4个会计周(FW)。假设本周是FW20 FY2022,我可以得到这个结果:
FISCAL_WEEK FISCAL_YEAR
16 2022
17 2022
18 2022
19 2022
用于返回上述输出的代码为:
SELECT
*
FROM
(
WITH t AS (
SELECT
fiscal_week - 1 lastweek,
fiscal_week - 5 week_x,
fiscal_year
FROM
TABLE
WHERE
Trunc(date_value) = Trunc(sysdate)
)
SELECT
DISTINCT fiscal_week,
t.fiscal_year
FROM
TABLE
OUTER JOIN t ON fiscal_week <> week_x
WHERE
to_char(fiscal_week) BETWEEN lastweek - 4
AND lastweek
ORDER BY
fiscal_week
)
但是,如果当前周是FW04 FY2022,则上面的代码无法返回所需的输出。
FISCAL_WEEK FISCAL_YEAR
53 2021
1 2022
2 2022
3 2022
同样,如果当前为FY03 FY2022,则输出为:
FISCAL_WEEK FISCAL_YEAR
52 2021
53 2021
1 2022
2 2022
我需要怎样写代码来得到这个输出呢?也许case语句可以工作,但是我想看看是否有其他的解决方法?任何帮助都将不胜感激。
谢谢你,谢谢你
2条答案
按热度按时间v9tzhpje1#
您可以将条件放在日期值而不是星期上以获得所需的输出,然后使用
OFFSET 1
跳过当前星期并仅提取后面4行。请参见demo。
ujv3wf0j2#
不要使用
FISCAL_WEEK
和FISCAL_YEAR
列;只需使用DATE
列,并将其与基于ISO周开始的范围进行比较:其中,对于示例数据:
如果
SYSDATE
为2022-01-17,则将输出:| 会计_周|会计年度|
| - -|- -|
| 五十二人|小行星2021|
| 五十三个|小行星2021|
| 一个|小行星2022|
| 2个|小行星2022|
fiddle