sql >> データベース >  >> RDS >> PostgreSQL

2つの日付の間の週

    ウィンドウ関数はあなたの友達です:

    SELECT week_num,
           min(d) AS start_date,
           max(d) AS end_date
    FROM (SELECT d,
                 count(*) FILTER (WHERE new_week) OVER (ORDER BY d) AS week_num
          FROM (SELECT DATE '2018-09-05' + i AS d,
                       extract(dow FROM DATE '2018-09-05'
                                        + lag(i) OVER (ORDER BY i)
                              ) = 1 AS new_week
                FROM generate_series(0, DATE '2018-09-27' - DATE '2018-09-05') AS i
               ) AS week_days
         ) AS weeks
    GROUP BY week_num
    ORDER BY week_num;
    
     week_num | start_date |  end_date  
    ----------+------------+------------
            0 | 2018-09-05 | 2018-09-09
            1 | 2018-09-10 | 2018-09-16
            2 | 2018-09-17 | 2018-09-23
            3 | 2018-09-24 | 2018-09-27
    (4 rows)
    


    1. PHPMySQLで508リソース制限に達した問題を修正する方法

    2. OracleSQLクエリで角かっこで囲まれた文字列を抽出する方法

    3. MySQLからOracleへの構文エラー(制限/オフセット/更新)

    4. antを使用したJDBCCOPY