我正在尝试修复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。这是我唯一更改的内容,添加了该行以修复日期,并完全消除了我的表。我写的最大行数写错了吗?
答案 0 :(得分: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
的{{1}}。 2018-06-22
将返回聚合的最大值,在这种情况下,它将返回MAX()
等于或大于目标的所有内容。 START_DATE
返回合计中的最小值。此外,由于您正在执行以下操作:
MIN()
...您可以通过以下方式简化查询:
DATE("Trade Details 2".START_DATE) as START_DATE