首页 > 解决方案 > 如何在sql中汇总动态期间的信息?

问题描述

我有一张订单表和以下字段:

create table orders2 (
  orderID int,
  customerID int,
  date DateTime,
  amount int) 
engine=Memory;

每个客户每天可以下 0 个或多个订单。我需要创建一个 SQL 查询,该查询将为每个客户显示他/她在从客户下订单之日起的 3 天内完成了多少订单。

因此,对于每个客户,查询应该检测第一个订单的日期,然后计算从第一个日期起 3 天后的日期,然后过滤行以仅接受日期在给定范围内的订单,然后执行该时间段内的订单计数 (orderID)。目前,我只能检测到每个客户的第一个订单的日期。

 SELECT 
    O.customerID, 
    O.date AS first_day, 
    COUNT(O.orderID) AS first_day_orders_num, 
    SUM(O.amount) AS first_day_amount
 FROM orders2 AS O
 INNER JOIN 
(
    SELECT 
        customerID, 
        MIN(date) AS first_date
    FROM orders2
    GROUP BY customerID
) AS I ON (O.customerID = I.customerID) AND (O.date = I.first_date)
GROUP BY 
    O.customerID, 
    O.date

标签: sqlclickhouse

解决方案


我真的不明白你需要什么结果。可能它可以使用数组来解决。

这是使用 vanilla sql 的解决方案

select customerID, min(first_date), sum(num_orders_per_day)
from ( 
   select customerID, date, min(date) first_date, count() num_orders_per_day
   from orders2
   group by customerID, date
   having date <= first_date + interval 3 days
   )
group by customerID   

推荐阅读