SELECT TYPE, TERMINAL, PERIOD_NUMBER, WEEK, DM FROM
(SELECT 'ACTUAL' AS TYPE, TERMINAL, PERIOD_NUMBER, "WEEK", SUM(CASE WHEN TYPE = 'REVENUE' THEN TOTAL ELSE 0 END - CASE WHEN TYPE = 'EXPENSE' THEN TOTAL ELSE 0 END) DM FROM BT_CU_DM_TERMINAL
WHERE TERMINAL NOT IN ('99','88')
GROUP BY TERMINAL, PERIOD_NUMBER, "WEEK"
UNION
SELECT 'BUDGET' AS TYPE, RIGHT(GL_ACCT_ID, 2) TERMINAL, PERIOD_NUMBER, WEEK(CURRENT DATE - 5 DAYS) "WEEK",
CASE WHEN WEEK(CURRENT DATE - 5 DAYS) IN (40, 41, 42, 43, 44, 53,1,2,3,4,5, 14,15,16,17,18,27,28,29,30,31) THEN BUDGET_AMT/5 ELSE BUDGET_AMT/4 END DM FROM GL_BUDGETS WHERE
FISCAL_YEAR_CODE = '2015' AND GL_ACCT_ID LIKE '01-6999-%'
ORDER BY PERIOD_NUMBER, WEEK, TERMINAL)
我正在使用DB2,并试图找到一个适当的WHERE子句,以便动态获取当前的一周;无论何时使用此声明。例如,我们在第44周;然而,当下周流行时,我希望它显示为本周。如何选择特定的日期范围?
谢谢!
我试过使用WHERE WEEK = CURRENT_WEEK,但出现错误Current_week在使用它的上下文中无效 – OVO
如果您有日历表,这将非常容易。除此之外,还有不止一种类型的“周”。你想要哪一个? ISO年度周(“第一周”有时会在上一年的12月份开始),自1月1日以来的几周(上周是1或2天),还是一个“财政周”,哪一个都不受?请注意,一周的第一天是依赖于文化的(尽管我认为DB2实际上只使用星期一)。 –