在postgresql中查找每一天时间每一行的列数据总和
Finding the sum of column data of each row in each day hour in postgresql
我对 PostgreSQL 非常陌生。最近我正在处理一个数据库,其中有一个 table 名称“store”。商店有 item_id 作为主键。这是我商店中的演示数据 table :
id
item_id
supplier_id
received
quantity
12
34
6
2019-3-21 11:55:23
54
99
42
4
2019-3-21 11:23:12
98
19
39
6
2019-3-21 12:59:23
21
69
82
3
2019-3-21 10:29:11
32
我想制定一个查询,该查询将 return 每天收到的用品数量(用品 = 数量总和) hour.the 输出将包括天时排序按小时计算。
输出将是这样的:
hour
supplies
2019-3-21 11:00:00 - 11:59:59
152
2019-3-21 12:00:00 - 12:59:59
21
谁能帮我在 postgreSQL 中制定这个查询?
您可以在此处使用日历 table 方法。假设我们只需要覆盖单个日期 2019-03-21
的 24 小时周期,我们可以尝试:
with dates as (
select generate_series(
(date '2019-03-21')::timestamp,
(date '2019-03-22')::timestamp,
interval '1 hour'
) as dt
)
select
d.dt::date::text || ' ' ||
to_char(d.dt::time,'HH24:MM:SS') || ' - ' ||
to_char(d.dt::time + interval '1 hour' - interval '1 second', 'HH24:MM:SS') as hour,
coalesce(sum(s.quantity), 0) as supplies
from dates d
left join store s
on s.received >= d.dt and s.received < d.dt + interval '1 hour'
group by
d.dt
order by
d.dt;
注意:如果您只想查看总和为非零的小时数,只需将以下 having
子句添加到上述查询中:
having sum(s.quantity) > 0
我对 PostgreSQL 非常陌生。最近我正在处理一个数据库,其中有一个 table 名称“store”。商店有 item_id 作为主键。这是我商店中的演示数据 table :
id | item_id | supplier_id | received | quantity |
---|---|---|---|---|
12 | 34 | 6 | 2019-3-21 11:55:23 | 54 |
99 | 42 | 4 | 2019-3-21 11:23:12 | 98 |
19 | 39 | 6 | 2019-3-21 12:59:23 | 21 |
69 | 82 | 3 | 2019-3-21 10:29:11 | 32 |
我想制定一个查询,该查询将 return 每天收到的用品数量(用品 = 数量总和) hour.the 输出将包括天时排序按小时计算。
输出将是这样的:
hour | supplies |
---|---|
2019-3-21 11:00:00 - 11:59:59 | 152 |
2019-3-21 12:00:00 - 12:59:59 | 21 |
谁能帮我在 postgreSQL 中制定这个查询?
您可以在此处使用日历 table 方法。假设我们只需要覆盖单个日期 2019-03-21
的 24 小时周期,我们可以尝试:
with dates as (
select generate_series(
(date '2019-03-21')::timestamp,
(date '2019-03-22')::timestamp,
interval '1 hour'
) as dt
)
select
d.dt::date::text || ' ' ||
to_char(d.dt::time,'HH24:MM:SS') || ' - ' ||
to_char(d.dt::time + interval '1 hour' - interval '1 second', 'HH24:MM:SS') as hour,
coalesce(sum(s.quantity), 0) as supplies
from dates d
left join store s
on s.received >= d.dt and s.received < d.dt + interval '1 hour'
group by
d.dt
order by
d.dt;
注意:如果您只想查看总和为非零的小时数,只需将以下 having
子句添加到上述查询中:
having sum(s.quantity) > 0