繁体   English   中英

SQL 查询:获取每个 state 的天数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM