0

我正在尝试修复我的 SQL 表中的一些日期。为了上下文,我将“贸易详情”和“贸易详情 2”这两个表连接在一起。“贸易详情 2”中的一列是“START_DATE”,其日期可以追溯到 2000 年初,格式为 2010-05-08。我希望将 2018 年 6 月 22 日之前的每个 START_DATE 都设为 2018 年 6 月 22 日。目前,我的代码如下:

SELECT "Trade Details 2".Portfolio, 
"Trade Details 2".CONTRACT_ID, 
DATE("Trade Details 2".START_DATE) as START_DATE, 
DATE(substr("Trade Details 2".MATURITY_DATE, 0, 5) || '-' || substr("Trade 
Details 2".MATURITY_DATE, 5,2) || '-' ||    substr("Trade Details 
2".MATURITY_DATE, 7, 9)) as MATURITY_DATE, 
"Trade Details 2".NOTIONAL1,
"Trade Details 2".CONTRACT_NPV,
"Trade Details".TERM,
MAX(date('2018-06-22'), date("Trade Details 2".start_date))
FROM "Trade Details 2" 
JOIN "Trade Details" 
WHERE "Trade Details 2".CONTRACT_ID="Trade Details".FCC_ID and
("Trade Details 2".NOTIONAL1 > "0.0") and
("Trade Details 2".MATURITY_DATE > DATE(substr('20180602', 0, 5) || '-' || 
substr('20180602', 5,2) || '-' ||    substr('20180602', 7, 9)) )
ORDER BY CONTRACT_ID asc

我认为这在理论上应该有效,但由于某种原因它不是。我添加了 max(date) 行,我的表从 19000 行变为 0。这是我唯一更改的内容,添加该行来修复日期,这完全消除了我的表。我写错了最大线吗?

4

1 回答 1

0

如果添加该行:

MAX(date('2018-06-22'), date("Trade Details 2".start_date))

引起这个问题,你可以考虑逆逻辑:

MIN(date('2018-06-22'), date("Trade Details 2".start_date))

既然你想找到START_DATE小于或等于2018-06-22. MAX()将返回聚合的最大值,在这种情况下,它将返回START_DATE等于或大于您的目标的所有内容。MIN()返回聚合中的最小值。此外,由于您正在执行以下操作:

DATE("Trade Details 2".START_DATE) as START_DATE

...您可以通过以下方式使用它来简化您的查询:

MIN(date('2018-06-22'), START_DATE)
于 2018-07-09T21:19:06.330 回答