SQL 服务器:每个日期的订单数

SQL Server : number of orders per date with day column

我有一个查询可以提取每个日期的订单数量。

SELECT 
    name, CONVERT(VARCHAR(10), order_date, 120) AS order_date, 
    COUNT(1) AS orders    
FROM 
    orders AS od
WHERE 
    id = 73
GROUP BY 
    CONVERT(VARCHAR(10), order_date, 120), name 
ORDER BY 
    order_date, name 

以下是我 运行 查询时得到的结果:

    name    order_date  orders
    --------------------------
    20pmam  2016-07-27  39
    20pmam  2016-07-28  30
    20pmam  2016-07-29  32
    20pmam  2016-07-31  468
    20pmam  2016-08-02  75
    20pmam  2016-07-05  30

我需要我的结果是这样的,有一个新的列日

name    order_date  orders  day 
-------------------------------
20pmam  2016-07-27  39      1
20pmam  2016-07-28  30      2 // days between 2016-07-27 to 2016-07-28
20pmam  2016-07-29  32      3 // days between 2016-07-27 to 2016-07-29
20pmam  2016-07-31  468     5 // days between 2016-07-27 to 2016-07-31
20pmam  2016-08-02  75      7 // days between 2016-07-27 to 2016-08-02
20pmam  2016-08-05  30      10 // days between 2016-07-27 to 2016-08-05

first/minimumorder_date应该作为第1天(上面的结果2016-07-27是第1天)其他的应该根据first/minimumorder_date.

这容易实现吗?

我不知道如何获得想要的结果。如果有任何建议,我将不胜感激。

您可以这样做 cross apply 以获取每个 order_date 之前的最短日期并在 datediff 中使用它。

SELECT name,CONVERT(VARCHAR(10), order_date, 120) AS order_date, Count(1)  [orders], 
1+coalesce(datediff(day,t.min_date,od.order_date),0) as [Day]
FROM orders AS od
cross apply (select min(od1.order_date) as min_date
             from orders od1 
             where od.id=od1.id and od.name=od1.name and od1.order_date<od.order_date) t
WHERE id = 73
GROUP BY CONVERT(VARCHAR(10), order_date, 120),name,datediff(day,t.min_date,od.order_date)
ORDER BY order_date,name 

试试这样的:

SELECT name,
       CONVERT(VARCHAR(10), order_date, 120) AS order_date, 
       Count(1) AS orders,
       DATEDIFF(DAY, first_order_date, order_date) + 1
FROM orders AS od 
JOIN (SELECT min(order_date) AS first_order_date
        FROM orders) as fod ON 1 = 1
WHERE id = 73
GROUP BY CONVERT(VARCHAR(10), order_date, 120),
         name,
         DATEDIFF(DAY, first_order_date, order_date) + 1
ORDER BY order_date, 
         name

希望这能解决您的问题