sql - PostgreSQL如何按小时获取订单

标签 sql postgresql

我有一张 table 看起来像

Order
OrderId
OrderStatus
OrderTime

我还有一张 table

OrderId
OrderLineId
OrderLineAmount
OrderLineCost

我正在尝试获取 2 个日期之间每小时的平均金额,即可能是一天的开始和结束,或者一周的开始和结束。 因此,例如,如果两个订单分别在上午 9 点和 9:30 以 50 英镑的价格下达。然后我试图得到:

20/07/2018 09:00:00 - 20/07/2018 10:00:00 
2 
100

这是否有意义?

我目前有这个但不是我需要的方式

SELECT 
COUNT(*) as "number of orders",
sum(ol.quantity * ol.amount) as "line total",
to_timestamp(floor((extract('epoch' from "ordertimestamp") / 600 )) * 600) AT TIME ZONE 'UTC' as interval_alias
FROM "Order" as o
inner join "OrderLine" as ol on o.orderid = ol.orderid
GROUP BY interval_alias;

任何帮助都会很棒,谢谢

最佳答案

给你:

create table ord (
  orderid int,
  orderstatus int,
  ordertime timestamp
);

insert into ord values (1, 1, '2018-07-20 09:10:00');
insert into ord values (2, 1, '2018-07-20 09:40:00');
insert into ord values (3, 1, '2018-07-20 10:15:00');

create table orderline (
  orderid int,
  orderlineid int,
  orderlineamount int,
  orderlinecost int
);

insert into orderline values (1, 100, 50, 40);
insert into orderline values (2, 100, 25, 40);
insert into orderline values (2, 100, 25, 40);
insert into orderline values (3, 10, 1234, 40);  

select
    date_trunc('hour', o.ordertime), 
    count(distinct o.orderid), 
    sum(l.orderlineamount)
  from ord o
  join orderline l on l.orderid = o.orderid
  group by date_trunc('hour', o.ordertime)
  order by date_trunc('hour', o.ordertime);

结果:

date_trunc                     count                 sum                   
---------------------------------------------------------------------------
2018-07-20 09:00:00.0          2                     100                   
2018-07-20 10:00:00.0          1                     1234                  

关于sql - PostgreSQL如何按小时获取订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51442914/

相关文章:

SQL如何通过连接获取数组的选择属性?

postgresql - Docker-compose:应用程序无法连接到 Postgres 容器

postgresql - 带有 doctrine2、symfony2 和 postgresql 实体的案例

mysql - 使用 JOINS 而不是子查询

php - 如何查询和排列两个相似的表

sql - 更新表中列值为空的所有行的列值?

mysql - 按日期和条件关联两个表

java - PostgreSQL JDBCPreparedStatement的setBytes更改参数值

database - 从 Postgres sql 文件恢复

SQL JOIN 与同一个表