Je dois écrire une déclaration de cas dans la clause WHERE, qui est - lorsque current_date est le 1er du mois puis sélectionnez les données entre le 1er jour du mois précédent ET le dernier jour le mois précédent AUTRE du mois de Curr jusqu'à la date. J'ai écrit ceci jusqu'ici mais cela ne fonctionne pas. '05/01/2017 'sera la date d'entrée.TERADATA cas où instruction dans la clause WHERE
SELECT *
FROM MyTable
WHERE calendar_date
BETWEEN
CASE WHEN extract (day from CAST('05/01/2017' AS DATE FORMAT 'MM/DD/YYYY')) =1 --check to see date is 1st of month
THEN ADD_MONTHS((CAST('05/01/2017' AS DATE FORMAT 'MM/DD/YYYY') - EXTRACT(DAY FROM CAST('05/01/2017' AS DATE FORMAT 'MM/DD/YYYY'))+1), -1) --1st of prev month
AND ADD_MONTHS(CURRENT_DATE - EXTRACT(DAY FROM CURRENT_date), 0) --last day prev month
ELSE CAST('05/01/2017' AS DATE FORMAT 'MM/DD/YYYY') - EXTRACT(DAY FROM CAST('05/01/2017' AS DATE FORMAT 'MM/DD/YYYY'))+1, 0) --else 1st of Curr mont
AND CURRENT_DATE
end
order by calendar_date
Juste une suggestion, mais vous pouvez dériver les champs dont vous avez besoin dans la clause SELECT et encapsuler la requête dans une vue en ligne (sous-requête). Pourrait rendre le code plus facile à lire (et déboguer) plus tard si vous pouvez voir les valeurs dérivées de la logique conditionnelle. – Sevyns
@Sevyns, Pouvez-vous donner un exemple de ce que vous suggérez? – SilverFish
Pour commencer, la date littérale est écrit comme: 'date '2017-05-01'' comme dans' select date' 2017-05-01 '+ 1' –