I have a table ISIN_TBL
which has two fields IDENTIFIER
and ALLT_DATE
which are of datatype varchar
and Date
respectively.
There are many ALLT_DATE
for each IDENTIFIER
in the table. Normally for each IDENTIFIER
the ALLT_DATE
should be the same. But just to confirm i want to write a sql query to list IDENTIFIER
which has has different ALLT_DATE
.
I want to modify my below sql query:
Select count(*), IDENTIFIER, ALLT_DATE from ISIN_TBL group by IDENTIFIER, ALLT_DATE
Advertisement
Answer
You can use GROUP BY
and HAVING
to get the exceptsion
Select IDENTIFIER from ISIN_TBL group by IDENTIFIER having MIN(ALLT_DATE) <> MAX(ALLT_DATE);
If you want the list of dates — and it is not too long — you can use LISTAGG()
:
Select IDENTIFIER, LISTAGG(ALLT_DATE, ',') WITHIN GROUP (ORDER BY ALLT_DATE) from ISIN_TBL group by IDENTIFIER having MIN(ALLT_DATE) <> MAX(ALLT_DATE);
Or if there are lots of rows, uses SELECT DISTINCT
to get distinct values:
Select IDENTIFIER, LISTAGG(ALLT_DATE, ',') WITHIN GROUP (ORDER BY ALLT_DATE) from (SELECT DISTINCT IDENTIFIER, ALLT_DATE FROM ISIN_TBL ) t group by IDENTIFIER having MIN(ALLT_DATE) <> MAX(ALLT_DATE);