【发布时间】:2017-03-03 20:02:33
【问题描述】:
我需要在包含交易信息的表中创建一个日期范围。该表在一周内通过手动过程偶尔更新。每次更新表时,事务都会添加到上一个星期日。例如,上传是昨天进行的,因此交易是在上周日(2 月 26 日)加载的。如果它是在星期三装载的,它的日期仍然是星期日。关键是我的事务以及数据加载到表时都有一个移动目标。我正在尝试将我的回溯期修复为最新交易的日期,然后再回溯三周。这是我提出的查询:
SELECT distinct TransactionDate
FROM TransactionTABLE TB
inner join (
SELECT distinct top 21 TransactionDate FROM TrasactionTABLE ORDER BY TransactionDate desc
) A on TB.TransactionDate = A.TransactionDate
ORDER BY TB.TransactionDate desc
从技术上讲,此代码有效。我现在遇到的问题是,如果在给定日期(例如银行假期(在本例中为马丁路德金纪念日))没有交易,那么查询回溯到某一天太远了。
我尝试了一些不同的选项,包括 MAX(TransactionDate),但是如果我在子查询或 CTE 中使用它,那么在 WHERE 语句中使用新值作为参考,我只会得到最大值或减去的值该声明由。例如,如果我说 WHERE TransactionDate >= MAX(TransactionDate)-21 并且最大日期是 2 月 26 日,那么结果是 2 月 2 日,而不是 2 月 2 日到 2 月 26 日的日期范围。
在总结中,我需要的是从最近交易日期起三周后的日期范围。这是针对每日报告的,因此我无法将日期硬编码。由于我也在使用 Excel 连接,因此禁止使用 Declare 语句。
提前感谢 StackOverflow 大师!
【问题讨论】:
标签: sql-server-2008 date-range