SQL 按小时获取不同的客户数

SQL get distinct customer count by hour

我有两个 table,在下订单时记录日期和时间,另一个 table 在提取订单发票时记录日期和时间列.我需要了解每小时有多少客户,但有些客户正在下订单,有些客户正在领取发票,有些客户两者都在做。同一客户在同一 day/hour.

上可能有多个订单和发票
OrderTable:
Ordernum
CustomerID
datein
timein

InvoiceTable:
CustomerID
InvoiceID
Ordernum
datepicked
timepicked 

我试过这个 SQL,但我无法找到如何从 tables 和 tables 上排列的日期和时间中获取 DISTINCT CUSTOMERID ,我在结果中注意到,如果一小时/天没有订单,则列没有排列。

Select o.datein, i.datepicked, (o.datein) As iDay, HOUR(o.timein) as iH,
DayOfMonth(i.datepicked) As pDay, HOUR(i.timepicked) as pH, Count(*) as Total
from OrderTable o, InvoiceTable i
Where
o.datein >= '2019-01-01' and o.datein <= '2019-12-31'
GROUP BY o.datein, i.datepicked, iDay, iH, pDay, pH

感谢您的帮助。 金

如果你在这两个 table 之间有关系,那将是可能的。如果我理解你正在尝试做什么,InvoiceTable 需要是 OrderTable 的子 table,具有与其父 "OrderTable" 主键相关的外键字段 "OrderNum" "OrderNum".因此,您不需要 InvoiceTable 上的字段 "CusotmerID",并且您会知道何时提取的发票属于同一天的订单。

不确定为什么表会按原样设置,但如果您真正关心的是每个 date/hour 的 DISTINCT 客户,我会通过预先合并这些记录来执行以下操作,然后从那。如果交易是在不同的时间完成的,请不要担心加入,除非您考虑的是订单和发票都在同一小时内处理。如果一个订单在 10:59 完成并且发票是 11:00 仅相隔 1 分钟,但代表 2 个不同的时间,会发生什么情况。这将是相同的 1 位客户出现在每个单独的小时组件中。

注意第一个 "FROM" 子句有一个联合将所有记录获取到相同列名的大量记录,每个记录都有各自的 2019 日历 activity 日期。完成后,获取并分组 COUNT DISTINCT 客户。

select
        AllRecs.DateIn,
        hour( AllRecs.TimeIn ) ByHour,
        DayOfMonth(AllRecs.DateIn) pDay, 
        Count( distinct AllRecs.CustomerID ) UniqueCustomers
    from
    ( select 
            ot.CustomerID, 
            ot.datein, 
            ot.timein
        from 
            OrderTable ot
        where
                ot.datein >= '2019-01-01' 
            and ot.datein <= '2019-12-31'
      union all
      select 
            it.CustomerID, 
            it.datepicked datein, 
            it.timepicked timein
        from 
            InvoiceTable it
        where
                it.datepicked >= '2019-01-01' 
            and it.datepicked <= '2019-12-31' ) AllRecs
    group by
        AllRecs.DateIn,
        hour( AllRecs.TimeIn ),
        DayOfMonth(AllRecs.DateIn)