Search code examples
sqloracle11gquery-tuning

How to get latest inserted value on not grouped column?


How get MY_LATEST_INSERTED_NUMBER_BASING_ON_MY_DATE_COLUMN_FOR_ID_CONTEXT in more efficient and elegant way from below query ?

SELECT MAX(MY_DATE_COLUMN),
 ID,
 listagg(SOME_COLUMN, '') within GROUP (ORDER BY MY_DATE_COLUMN),
 SUBSTR(
      listagg(MY_NUMBER, ';') within GROUP (ORDER BY MY_DATE_COLUMN DESC),
      1,
      instr(
             listagg(MY_NUMBER, ';') within GROUP (ORDER BY MY_DATE_COLUMN DESC),'-') - 1
           ) as MY_LATEST_INSERTED_NUMBER_BASING_ON_MY_DATE_COLUMN_IN_ID_CONTEXT
 FROM MY_TABLE
 GROUP BY ID;

Solution

  • If I understand correctly, you want keep:

    SELECT MAX(MY_DATE_COLUMN), ID,
           listagg(SOME_COLUMN, '') within GROUP (ORDER BY MY_DATE_COLUMN),
           max(MY_LATEST_INSERTED_NUMBER_BASING_ON_MY_DATE_COLUMN_IN_ID_CONTEXT)
               keep (dense_rank first order by MY_DATE_COLUMN DESC)
    FROM MY_TABLE
    GROUP BY ID;
    

    The ALL CAPS don't really help convey what you want to do.