how to find out max of a field for two different conditions in sql

前端 未结 2 740
野的像风
野的像风 2021-01-26 12:36

I have a table EMPDATA with the following data:

EntityId    MeetDate    SourceCode  Status
1           06.11.2017   AB          FNL
1           05.2.2018    AB           


        
相关标签:
2条回答
  • 2021-01-26 13:15

    @Anita, I coudn't provide answer your latest question "Finding max date with different conditions [duplicate]" due to set as duplicate question. You can try the following query

    SELECT B.EntityId,A.Eligibility,A.MeetDate,B.LastDate, B.InterimDate, 
    (CASE WHEN A.Eligibility=1 THEN DATEADD(MONTH,6,A.MeetDate) ELSE DATEADD(Month,4,A.MeetDate) END) AS BusinessDate FROM StackTable A
    INNER JOIN
    (SELECT EntityId,
           MAX(CASE 
                  WHEN SourceCode = 'AB' AND status = 'FNL' THEN MeetDate 
               END) AS LastDate,
           MAX(CASE WHEN SourceCode = 'IU' THEN MeetDate END) AS InterimDate
    
    FROM StackTable
    GROUP BY EntityId) B
    ON A.EntityId=B.EntityId AND A.MeetDate = B.LastDate
    
    0 讨论(0)
  • 2021-01-26 13:23

    You can easily achieve the expected output using conditional aggregation:

    SELECT EntityId,
           MAX(CASE 
                  WHEN SourceCode = 'AB' AND status = 'FNL' THEN MeetDate 
               END) AS LastDate,
           MAX(CASE WHEN SourceCode = 'IU' THEN MeetDate END) AS InterimDate          
    FROM mytable
    GROUP BY EntityId
    

    This query implements all logic described in the OP except for:

    • InterimDate ... which has occurred after the latest Meetdate for SourceCode ‘AB’ and Status ‘FNL’.

    You can implement this using a CTE so that the code looks cleaner:

    ;WITH CTE AS (
    SELECT EntityId,
           MAX(CASE 
                  WHEN SourceCode = 'AB' AND status = 'FNL' THEN MeetDate 
               END) AS LastDate,
           MAX(CASE WHEN SourceCode = 'IU' THEN MeetDate END) AS InterimDate          
    FROM mytable
    GROUP BY EntityId
    )
    SELECT LastDate, 
           CASE 
              WHEN InterimDate > LastDate THEN InterimDate
           END AS InterimDate
    FROM CTE 
    

    Demo here

    0 讨论(0)
提交回复
热议问题