添加一行代码会删除我的整个表SQL

时间:2018-07-09 19:33:53

标签: db-browser-sqlite

我正在尝试修复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。这是我唯一更改的内容,添加了该行以修复日期,并完全消除了我的表。我写的最大行数写错了吗?

1 个答案:

答案 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