Замена каждой даты перед определенным днем ​​на этот день SQL - PullRequest
0 голосов
/ 05 июля 2018
SELECT 
    "Trade Details 2".Portfolio, 
    "Trade Details 2".CONTRACT_ID, 
    "Trade Details 2".START_DATE, 
    "Trade Details 2".MATURITY_DATE, 
    "Trade Details 2".NOTIONAL1, 
    "Trade Details 2".CONTRACT_NPV, 
    "Trade Details".TERM
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 > "20180621")
ORDER BY 
    CONTRACT_ID asc

Мне удалось убедиться, что каждая дата Maturity_Date наступает после 21 июня 2018 года, но у меня возникли проблемы с START_DATE. Моя цель - заменить каждую дату до 22 июня 2018 года на 22 июня 2018 года в столбце START_DATE.

Я пытался заменить "Детали сделки 2" .START_DATE <2018-06-22 С 2018-06-22), но безрезультатно. Есть ли способ сделать это в SQL? </p>

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Вы можете написать запрос так, предполагая SQLite:

SELECT td2.Portfolio, td2.CONTRACT_ID, 
       MAX(td2.START_DATE, '2018-06-22') as START_DATE
       td2.MATURITY_DATE, td2.NOTIONAL1, td2.CONTRACT_NPV, 
       td.TERM
FROM "Trade Details 2" td2 JOIN 
     "Trade Details" td
     ON td2.CONTRACT_ID = td.FCC_ID AND
        td2.NOTIONAL1 > 0.0 AND
        td2.MATURITY_DATE > '20180621'
ORDER BY  CONTRACT_ID asc;

Примечания:

  • Псевдонимы таблиц облегчают написание и чтение запроса.
  • Предположительно, NOTIONAL1 - это число, поэтому сравните его с числом, а не со строкой.
  • JOIN - хороший синтаксис. Всегда должно быть предложение ON.
  • В SQLite MIN() и MAX() принимают несколько аргументов. С несколькими аргументами они не являются функциями агрегирования, а ведут себя как LEAST() и GREATEST() в других базах данных.
0 голосов
/ 05 июля 2018

См. Start_date_bounded. Поскольку вы не пометили свои dbms, синтаксис может потребоваться настроить (например, ДАТА '2018-06-22'.

SELECT "Trade Details 2".Portfolio, "Trade Details 2".CONTRACT_ID, 
CASE WHEN "Trade Details 2".START_DATE < 2018-06-22 THEN 2018-06-22
     ELSE "Trade Details 2".START_DATE
 END AS start_date_bounded, "Trade Details 2".MATURITY_DATE, "Trade Details 
2".NOTIONAL1, "Trade Details 2".CONTRACT_NPV, "Trade Details".TERM
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 > "20180621")

ORDER BY CONTRACT_ID asc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...