Maybe someone have had the same issue.
I have this query:
select
d.referenca,
paketi.id_upnik,
date(zadnji_klic) as zadnji_klic,
date(datum_zadnjega_posiljanja_sms) as datum_zadnjega_posiljanja_sms,
date(zadnji_datum_opomina_maila) as zadnji_datum_opomina_maila,
date(datum_dopisa_dolznika) as datum_dopisa_dolznika,
case when zadnji_datum_opomina_maila > zadnji_klic or zadnji_klic is null and zadnji_datum_opomina_maila > datum_zadnjega_posiljanja_sms or datum_zadnjega_posiljanja_sms is null and zadnji_datum_opomina_maila > datum_dopisa_dolznika or datum_dopisa_dolznika is null then date(zadnji_datum_opomina_maila)
when datum_zadnjega_posiljanja_sms > zadnji_klic or zadnji_klic is null and datum_zadnjega_posiljanja_sms > zadnji_datum_opomina_maila or zadnji_datum_opomina_maila is null and datum_zadnjega_posiljanja_sms > datum_dopisa_dolznika or datum_dopisa_dolznika is null then date(zadnji_klic)
when datum_dopisa_dolznika > datum_zadnjega_posiljanja_sms or datum_zadnjega_posiljanja_sms is null and datum_dopisa_dolznika > zadnji_klic or zadnji_klic is null and datum_dopisa_dolznika > zadnji_datum_opomina_maila or zadnji_datum_opomina_maila is null then date(datum_dopisa_dolznika)
when zadnji_klic > datum_zadnjega_posiljanja_sms or datum_zadnjega_posiljanja_sms is null and zadnji_klic > zadnji_datum_opomina_maila or zadnji_datum_opomina_maila is null and zadnji_klic > datum_dopisa_dolznika or datum_dopisa_dolznika is null then date(zadnji_klic)
else null end as datum_zadnji_kontakt
from QUERIES AND SUBQUERIES
At the last column I would like to get the youngest date of previous 4 columns. In these 4 columns there are some dates but also null values. If all 4 values are null than the last column should also return null, if there is at least one date it should return that date.
The problem is the query is working but not correctly. It doesn't take always the youngest date. I am sure the problem is in this part of code:
case when zadnji_datum_opomina_maila > zadnji_klic or zadnji_klic is null and zadnji_datum_opomina_maila > datum_zadnjega_posiljanja_sms or datum_zadnjega_posiljanja_sms is null and zadnji_datum_opomina_maila > datum_dopisa_dolznika or datum_dopisa_dolznika is null then date(zadnji_datum_opomina_maila)
when datum_zadnjega_posiljanja_sms > zadnji_klic or zadnji_klic is null and datum_zadnjega_posiljanja_sms > zadnji_datum_opomina_maila or zadnji_datum_opomina_maila is null and datum_zadnjega_posiljanja_sms > datum_dopisa_dolznika or datum_dopisa_dolznika is null then date(zadnji_klic)
when datum_dopisa_dolznika > datum_zadnjega_posiljanja_sms or datum_zadnjega_posiljanja_sms is null and datum_dopisa_dolznika > zadnji_klic or zadnji_klic is null and datum_dopisa_dolznika > zadnji_datum_opomina_maila or zadnji_datum_opomina_maila is null then date(datum_dopisa_dolznika)
when zadnji_klic > datum_zadnjega_posiljanja_sms or datum_zadnjega_posiljanja_sms is null and zadnji_klic > zadnji_datum_opomina_maila or zadnji_datum_opomina_maila is null and zadnji_klic > datum_dopisa_dolznika or datum_dopisa_dolznika is null then date(zadnji_klic)
else null end as datum_zadnji_kontakt
Anyone?
CodePudding user response:
Try using PostgreSQL GREATEST
function:
SELECT d.referenca,
paketi.id_upnik,
DATE(zadnji_klic) AS zadnji_klic,
DATE(datum_zadnjega_posiljanja_sms) AS datum_zadnjega_posiljanja_sms,
DATE(zadnji_datum_opomina_maila) AS zadnji_datum_opomina_maila,
DATE(datum_dopisa_dolznika) AS datum_dopisa_dolznika,
GREATEST(zadnji_klic,
datum_zadnjega_posiljanja_sms,
zadnji_datum_opomina_maila,
datum_dopisa_dolznika) AS datum_zadnji_kontakt
FROM QUERIES AND SUBQUERIES