2016/07/09

同一グループ内の1件目を抜き出す SQL


  • Goal
    同一グループ内の一番上のレコードだけをSQLで抜き出す。
    例えば、売上明細から品番別の最も売上件数が多かった年月を抜き出す。
    アウトプットは、<品番>、<最も売上が上がった年月>、<その年月の売上件数>
  • How
    1. 月別に売上件数をサマリー
    2. ROW_NUMBER()で、一番売上件数が多かった月に'1'をセット
    3. ROW_NUMBER()が'1'だけを抜き出す
     
  • Source
    SELECT *
    FROM
    ( select a.*
    , ROW_NUMBER() OVER(PARTITION BY ITEM ORDER BY COUNT DESC, YYYYMM DESC) FLAG
    from
    ( select <ITEM> ITEM
    , to_char(<SALESDATE>,'YYYYMM') YYYYMM
    , count(1) COUNT
    from <SALES>
    group by <ITEM>
    , to_char(<SALESDATE>,'YYYYMM')
    ) a
    )
    WHERE FLAG = 1
    ;