Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:带日期列的每个日期的订单数_Sql_Sql Server 2005 - Fatal编程技术网

SQL Server:带日期列的每个日期的订单数

SQL Server:带日期列的每个日期的订单数,sql,sql-server-2005,Sql,Sql Server 2005,我有一个查询,可以查询每个日期的订单数量 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, nam

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

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
上述结果2016-07-27中的第一个/最小订单日期应视为第一天,并应根据第一个/最小订单日期计算其他日期

这容易做到吗

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

您可以通过交叉申请获得每个订单日期之前的最短日期,并在datediff中使用它

您可以执行此交叉应用以获取每个订单日期之前的最小日期,并在datediff中使用它

尝试以下方法:

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
希望这能解决您的问题

尝试以下方法:

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

希望这能解决您的问题

谢谢您的回答。我的实际查询有点复杂,但我知道了如何获得所需的结果。仅供参考,1=1上的内部联接相当于交叉联接。要获得所需的结果,我需要为子查询添加where条件。加入选择minorder_date作为订单的第一个_order_date,其中id=73作为fod ON 1=1感谢您的回答。我的实际查询有点复杂,但我知道了如何获得所需的结果。仅供参考,1=1上的内部联接相当于交叉联接。要获得所需的结果,我需要为子查询添加where条件。加入选择minorder_date作为订单的第一个_order_date,其中id=73作为fod ON 1=1感谢您的回答。我的实际查询有点复杂,但我知道如何获得所需的结果。谢谢你的回答。我的实际查询有点复杂,但我知道了如何获得所需的结果。