【发布时间】:2015-11-18 02:06:36
【问题描述】:
我有以下查询,其中包含 2 个日期:“交易日期”和“合约到期”。我只想查看前 营业 天的交易和相应的合约到期情况。我希望能够以某种方式在 where 子句中将其拉出,但是当我尝试调用 prev_weekday 时,查询被退回。任何帮助将不胜感激。
SELECT
p.tradedate as current_date,
case when to_char(p.tradedate, 'D') in (1,6,7)
then next_day(ip.tradedate, 'Monday')
else p.tradedate + 1 end
as next_weekday,
case when to_char(p.tradedate, 'D') in (1,2,7)
then next_day(ip.tradedate-7, 'Friday')
else p.tradedate - 1 end
as prev_weekday,
p.tradedate,
p.contractexpiration
FROM db.cmd h
JOIN db.stl p ON p.id = h.p_id
WHERE p.tradedate BETWEEN trunc(sysdate,'YEAR')
AND add_months(trunc(sysdate, 'YEAR'),12) - 1/24/60/60/
【问题讨论】:
-
假设工作日是工作日而周末不是,编写硬编码的工作日逻辑是一个糟糕的主意。唯一安全的做法是创建一个包含可预见未来的所有日期列表的表格,并带有一个标志或值来指示该日期是否为工作日。加入表以执行涉及工作日的逻辑。
-
“当我尝试调用 prev_weekday 时,查询被退回”是什么意思?意思是?你有错误吗?
-
我找到了一个业务逻辑表。但仍然无法仅在前一个工作日拉入。
-
不太清楚你想要什么;您是否正在尝试获取调整后的 next_weekday 或 prev_weekday 是今天之前的最后一个工作日(来自您的逻辑表)的记录? prev/next 是否也需要从该表中工作?可能有助于编辑问题和解释规则、显示表格结构并提供一些示例数据和预期结果。