Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

CASE WHEN Condition not working properly – POSTGRES

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.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

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?

>Solution :

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
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading