Search code examples
sqloracle-databasedatesubtraction

Subtract Max and Min from same column


select 
      d.FK_SOCRD_ID,
      d.SUBJECT_NUMBER,
      c.PTLASTNAME || ', ' || c.PTFIRSTNAME as "Patient name",
      min(b.created) as Data Entry 1,
      max(b.created) as Data Entry 2,
      min(b.created) - max(b.created) 
        || ' days and '
        || TO_CHAR(to_date('01/01/2000', 'MM-DD-YYYY') 
                + (b.created - b.created), 'HH24:MI:SS' ) AS Diff
   FROM 
      CR_MDT a
         full outer join CR_MDT_VERIFY b
            on a.CR_MDT_ID = b.FK_CR_MDT_ID
         left join patient c
            on a.FK_SOCRD_ID = c.SOCRD_ID
            left join PT_STUDY d
               on c.SOCRD_ID = d.FK_SOCRD_ID
   where 
          a.CR_MDT_DT between TO_DATE('01/01/2017', 'mm/dd/yyyy') 
      and TO_DATE('12/31/2017', 'mm/dd/yyyy')
   group by 
      d.FK_SOCRD_ID,
      d.SUBJECT_NUMBER,
      c.PTLASTNAME,
      c.PTFIRSTNAME,
      b.created

How can I subtract the max(b.created) from min(b.created)? I'm stuck on this part:

|| TO_CHAR(to_date('01/01/2000', 'MM-DD-YYYY') 
        + (b.created - b.created), 'HH24:MI:SS' ) AS Diff

I need help on how to write the subtraction part since b.created max and min are from the same column.


Solution

  • Here is what gave me the desired result:

    SELECT
    d.FK_SOCRD_ID,
    d.SUBJECT_NUMBER,
    c.PTLASTNAME || ', ' || c.PTFIRSTNAME AS "Patient name",
    min(b.created) AS min_created,
    max(b.created) AS max_created,
    trunc(max(b.created)) - trunc(min(b.created)) || ' days' AS Diff
    FROM CR_MDT a
    FULL JOIN CR_MDT_VERIFY b
    ON a.CR_MDT_ID = b.FK_CR_MDT_ID
    LEFT JOIN patient c
    ON c.SOCRD_ID = a.FK_SOCRD_ID
    LEFT JOIN PT_STUDY d
    ON d.FK_SOCRD_ID = c.SOCRD_ID
    WHERE a.CR_MDT_DT BETWEEN TO_DATE('01/01/2017', 'mm/dd/yyyy') AND TO_DATE
    ('12/31/2017', 'mm/dd/yyyy')
    GROUP BY d.FK_SOCRD_ID,
    d.SUBJECT_NUMBER,
    c.PTLASTNAME,
    c.PTFIRSTNAME