Добавление одной строки кода удаляет всю таблицу SQL

Я пытаюсь исправить некоторые даты, которые у меня есть в моей таблице SQL. Для контекста я соединил две таблицы: "Детали сделки" и "Детали сделки 2". Один из столбцов в "Сведениях о сделке 2" - это "START_DATE" с датами начала 2000-х годов в формате 2010-05-08. Я хочу сделать каждую START_DATE до 2018-06-22 до 2018-06-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 ответ

При добавлении строки:

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)
Другие вопросы по тегам