[英]SQL query: Get number of days for each state
我有一个包含动作列表的表格:
+----+----------+------------+------------+
| id | boat_id | date | state |
+----+----------+------------+------------+
| 1 | 2 | 2020-01-03 | 1 |
| 2 | 2 | 2020-01-23 | 3 |
| 3 | 2 | 2020-03-02 | 1 |
| 4 | 2 | 2020-03-29 | 2 |
+----+----------+------------+------------+
我需要一个 SQL 查询来获取船在每个 state 中的天数,并给出日期范围。
例如,范围为 2020-03-01 - 2020-03-31:最新的机芯变化是:state 3 date '2020-01-23'。 所以 2020-03-01 state 是 3,直到 2020-03-02,它变为 1。然后 state 保持为 1,直到 2020-03-29 变为 2。
The result would be: State 3 days: 1 (from 2020-03-01 to 2020-03-02) State 1 days: 27 (from 2020-03-02 to 2020-03-29) State 2 days: 3 (from 2020-03-29 至 2020-03-31)
嗯。 . . 这有点痛苦。 毕竟,您可能根本没有与 in 约会。
但是你可以用lead()
来处理这个:
select t.boat_id, t.state,
sum( datediff(least(coalesce(next_date, '2020-04-01'), '2020-04-01'),
greatest(date, '2020-03-01')
)
) as days_in_march_2020
from (select t.*,
lead(date) over (partition by boat_id order by date) as next_date
from t
) t
where date < '2020-04-01' and
(next_date is null or next_date >= '2020-03-01')
group by t.boat_id, t.state
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.