

休暇日数を社員ごとに古い順に積算して、合計10を超えた年度を知りたいです。  
考え方のヒントだけでも頂けると大変助かります。

**対象のデータ**

[code]

    | 年度 | 社員ID | 休暇日数   
    +------+--------+-----------+
    | 2014 | 00001  | 5        
    | 2015 | 00001  | 3        
    | 2016 | 00001  | 7        
    | 2017 | 00001  | 4
    | 2014 | 00002  | 4
    | 2017 | 00002  | 6
    | 2019 | 00002  | 10
    
[/code]

**期待する結果**

[code]

    社員ID | 年度  
    -------+--------
    00001  | 2016
    00002  | 2017
    
[/code]


CC BY-SA 4.0
2019-12-04T06:24:14.347
61088
2019-12-05T01:43:47.557
2019-12-04T06:29:27.013
3060
36915
question
sql oracle
SQLで指定の条件に達した年度を出したい


標準的なSQLの範囲で書いてみました。  
ある社員のある年度までの合計休暇日数の一覧を出して、10日を超えているもので絞り込み、年度の最小を出す、をそのまま書き下しています。

### テーブル定義

[code]

    CREATE TABLE IF NOT EXISTS PaidLeaveDays( 
      yeras int not null
      , employee_id int not null
      , paid_leave_days int not null
    ); 
    
[/code]

### 抽出SQL

[code]

    SELECT
      MIN(pld10.years) AS years
      , pld10.employee_id 
    FROM
      ( 
        SELECT
          pld2.years
          , pld2.employee_id
          , sum(pld1.paid_leave_days) AS paid_leave_days_total 
        FROM
          PaidLeaveDays AS pld1 
          INNER JOIN PaidLeaveDays pld2 
            ON pld1.employee_id = pld2.employee_id 
            AND pld1.years <= pld2.years 
        GROUP BY
          pld2.years
          , pld2.employee_id 
        HAVING
          paid_leave_days_total >= 10
      ) AS pld10 
    GROUP BY
      pld10.employee_id; 
    
[/code]

### 結果

[code]

    years   employee_id
    2016    1
    2017    2
    
[/code]


CC BY-SA 4.0
2019-12-05T01:43:47.557
61118
2019-12-05T01:43:47.557
27410
61088
answer