【发布时间】:2019-01-10 16:37:47
【问题描述】:
假设我们有一个match 表,并且该表的精简版本如下所示:
Column | Type | Collation | Nullable | Default
-----------------------------------+--------------------------+-----------+----------+--------------------
uuid | uuid | | not null | uuid_generate_v4()
present_state | text | | |
created_at | timestamp with time zone | | not null |
updated_at | timestamp with time zone | | |
我正在尝试获取从过去某个任意日期开始的活动匹配数的一周一周表示。
根据架构,我们可以通过查看created_at 列、对它们进行分组和计数来了解一周内开始了多少新的活动匹配。对于已经结束的比赛,我们可以通过查看updated_at 列并确保present_state 已“完成”来执行类似的操作。
另外需要考虑的是,可能有几周根本没有比赛发生,比赛可以无限期地进行。我一直在试图强迫一些 CTE 提供一个表格,其中包含一个比赛开始的每个日期的条目,一个相反的表格,每个比赛结束的日期,以及一个我可以加入的生成时间序列考虑到缺少的几周。这是我到目前为止所得到的:
; WITH matches_begun AS
(
SELECT
date_trunc('day', created_at)::date AS date
FROM matches
)
, matches_finished AS
(
SELECT
date_trunc('day', updated_at)::date AS date
FROM matches
WHERE present_state = 'finished'
)
, weekly_time_series AS
(
select generate_series( '2018-01-01', current_date, interval '1 day' )
)
我不知道如何返回显示从过去的某个时间点到本周每周有多少活跃匹配的数据。
【问题讨论】:
标签: sql postgresql