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感谢您的回答。我的实际查询有点复杂,但我知道如何获得所需的结果。谢谢你的回答。我的实际查询有点复杂,但我知道了如何获得所需的结果。