【问题标题】:Grouping hour intervaled data into averages per day将每小时间隔的数据分组为每天的平均值
【发布时间】:2022-07-15 22:18:21
【问题描述】:

问题

数据库包含一个 Delivery 表,其中 三列: id开始时间结束时间

开始和结束列是无时区数据类型的时间戳 (YYYY-MM-DD HH:MM:SS)。

我想编写一个查询,生成一个包含两列的表: 平均交付时间.

示例

交付表示例:

| deliveryid |         start        |        finish        | 
+------------+----------------------+----------------------+
|      1     |  2021-12-03 02:00:00 |  2021-12-03 03:00:00 |
|      2     |  2021-12-03 06:00:00 |  2021-12-03 08:00:00 |
|      3     |  2021-12-04 15:00:00 |  2021-12-04 16:00:00 |

使用上述示例查询所需的结果:

|     day    |  average  | 
+------------+-----------+
| 2021-12-03 |  01:30:00 |
| 2021-12-04 |  01:00:00 |

我怎样才能做到这一点?

【问题讨论】:

  • 请将示例数据和预期结果添加到您的帖子中。

标签: sql postgresql aggregate-functions


【解决方案1】:

我们可以使用::date提取日期,然后在group by中使用。

select 
  *,
  finishing - starting time_difference
from t
出发|整理|交货 |时间差异 :----------------- | :----------------- | --------: | :-------------- 2022-05-07 08:00:00 | 2022-05-07 10:00:00 | 1 | 02:00:00 2022-05-07 12:00:00 | 2022-05-07 16:00:00 | 2 | 04:00:00
select 
  starting::date "date",
  AVG(finishing - starting) average_time
from t
group by starting::date
日期 |平均时间 :--------- | :----------- 2022-05-07 | 03:00:00

db小提琴here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 2021-05-19
    • 2017-11-12
    • 2019-07-05
    • 1970-01-01
    相关资源
    最近更新 更多