Skip to content
Advertisement

Count of Value column with case when and group by

Table:

Date            Id       Value                    
2019-02-09      a1       ab            
2019-01-12      a2       cd
2019-12-12      a1       ab
2017-07-23      a1       ab
2018-12-09      a1       ab
2018-12-28      a1       cd
2016-11-09      a2       cd
2016-05-19      a2       ab

Output:

      Id        Max-Min               
      a1        1     
      a2       -1   

The aim is to create Max_year_count-Min_year_count per Id.
For example, calculation in Value column :
(count of occurrence of value in max_year with group by Id)-(count of occurrence of value in min_year with group by Id)
Thanks !!

Advertisement

Answer

Oracle supports FIRST/LAST for aggregates:

SELECT id,
    -- latest year's count
    Count(*) KEEP (Dense_Rank LAST  ORDER BY Extract(YEAR From "Date"))
     -- oldest year's count
  - Count(*) KEEP (Dense_Rank FIRST ORDER BY Extract(YEAR From "Date"))
FROM DATA
GROUP BY Id
User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement