sql >> Database teknologi >  >> RDS >> PostgreSQL

Uger mellem to datoer

Vinduesfunktioner er din ven:

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. Er der en hurtig måde at kontrollere, om NOGEN kolonne er NULL?

  2. Ugyldig identifikator SQL

  3. Kan ikke slippe en rolle, der er givet til at forbinde databasen

  4. En abonnementsforretningsdatamodel