gpt4 book ai didi

sql - 从多个日期范围中提取每周天数

转载 作者:行者123 更新时间:2023-11-29 12:01:46 25 4
gpt4 key购买 nike

我在 PostgreSQL 10.5 中有一个表 trips:

id  start_date    end_date
----------------------------
1 02/01/2019 02/03/2019
2 02/02/2019 02/03/2019
3 02/06/2019 02/07/2019
4 02/06/2019 02/14/2019
5 02/06/2019 02/06/2019

我想计算与给定周重叠的旅行天数。表中的行程具有包含边界。每周从星期一开始,到星期日结束。预期结果将是:

week_of    days_utilized
------------------------
01/28/19 5
02/04/19 8
02/11/19 4

日历引用:

Monday 01/28/19 - Sunday 02/03/19
Monday 02/04/19 - Sunday 02/10/19
Monday 02/11/19 - Sunday 02/17/19

我知道如何用我使用的编程语言编写此代码,但我更喜欢在 Postgres 中执行此操作,但我不清楚从哪里开始...

最佳答案

您似乎需要generate_series() 以及joingroup by。计算涵盖的周数:

select gs.wk, count(t.id) as num_trips
from generate_series('2019-01-28'::date, '2019-02-11'::date, interval '1 week') gs(wk) left join
trips t
on gs.wk <= t.end_date and
gs.wk + interval '6 day' >= t.start_date
group by gs.wk
order by gs.wk;

编辑:

我知道你想要涵盖的日子。这是聚合中稍微多一点的工作:

select gs.wk, count(t.id) as num_trips,
sum( 1 +
extract(day from (least(gs.wk + interval '6 day', t.end_date) - greatest(gs.wk, t.start_date)))
) as days_utilized
from generate_series('2019-01-28'::date, '2019-02-11'::date, interval '1 week') gs(wk) left join
trips t
on gs.wk <= t.end_date and
gs.wk + interval '6 day' >= t.start_date
group by gs.wk
order by gs.wk;

注意:这不会返回您所拥有的准确结果。我认为这些是正确的。

关于sql - 从多个日期范围中提取每周天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55405882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com