第一篇文章,所以请耐心等待:) 我想计算在特定月份下订单的客户数量,并找到他们在该月以及该月之前的11个月内下订单的数量。我真的不确定从哪里开始,所以将不胜感激任何帮助,我也意识到这很模糊,因此可能会有一些后续问题
我目前有一个客户ID,订单ID及其订单日期的表格,如下所示:
CustomerID OrderID OrderDate
1234 5678 Dec-16
1234 5679 Jan-17
1235 5680 Jan-17
此数据将返回结果:
Date CustomerCount 12MonthOrderCount
Jan 2017 2 3
Dec 2016 1 1
谢谢!
答案 0 :(得分:0)
如果您使用的是T-SQL,则可以使用以下查询
从表1 t1中选择t1.CusttomerId 外用 ( 从表2 t2中选择顶部1 t2.CId,t2.OrderId 其中t2.CID = t1.CustomerId和[Date] = specificDate )q
,并且您必须选择所需字段的数量。
还可以使用一些嵌套选择查询。
答案 1 :(得分:0)
由于您的问题有很多未知数,因此我冒昧地提出了许多假设。其中之一是您使用MSSQL。这段代码可能会为您指明一个可能的方向。
www.
答案 2 :(得分:0)
我认为您想为此see here
使用窗口功能如果您还没有签出它们,我会这样做。
答案 3 :(得分:0)
要获取基表,请使用聚合:
select year(orderdate), month(orderdate), count(*) as num_orders
from orders o
group by year(orderdate), month(orderdate);
然后在12个月内可以执行以下操作:
select year(orderdate), month(orderdate), count(*) as num_orders,
(select count(*)
from orders o2
where year(o2.orderdate) * 100 + month(o2.orderdate) > year(o.orderdate) * 100 + month(o.orderdate) - 12 and
year(o2.orderdate) * 100 + month(o2.orderdate) <= year(o.orderdate) * 100 + month(o.orderdate)
) as num_12month_orders
from orders o
group by year(orderdate), month(orderdate);
您也可以使用变量来执行此操作,但这会变得有些复杂。
答案 4 :(得分:0)
我想您想找出本月有多少个订单。
弄清楚如何将OrderDate列中的文本转换为escolas["scholl_id"] = escolas["scholl_id"].replace(dict)
数据类型。
在WHERE语句中使用适当的日期算术。
1:这种表达式使您获得DATE
,显示DATE
中每月的第一天。此示例返回Mon yy
。
2018-02-01
因此,您可以使用这种查询来获取具有 SELECT STR_TO_DATE(CONCAT(' 1-','Feb-18'), '%e-%b-%y')
值的表
DATE
尝试一下。说服自己,它可以正确处理您的数据。
2:在WHERE子句中使用这些 SELECT CustomerID, OrderID,
STR_TO_DATE(CONCAT(' 1-',OrderDate), '%e-%b-%y') OrderDate
FROM table
值。为此,您需要知道the LAST_DAY(CURDATE())
function给出了本月的最后一天。而且您需要知道DATE
是本月的第一天。
因此,要按当月的客户ID进行计数
LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH
类似地,这可以获取截至本月底的年度的计数。
SELECT COUNT(*) CustomerCount, CustomerId
FROM orders
WHERE STR_TO_DATE(CONCAT(' 1-',OrderDate), '%e-%b-%y') >=
LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH
AND STR_TO_DATE(CONCAT(' 1-',OrderDate), '%e-%b-%y') <
LAST_DAY(CURDATE()) + INTERVAL 1 DAY
GROUP BY CustomerId
然后,您需要生成整体结果集,要求您加入这两个子查询
SELECT COUNT(*) 12MonthOrderCount, CustomerId
FROM orders
WHERE STR_TO_DATE(CONCAT(' 1-',OrderDate), '%e-%b-%y') >=
LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 YEAR
AND STR_TO_DATE(CONCAT(' 1-',OrderDate), '%e-%b-%y') <
LAST_DAY(CURDATE()) + INTERVAL 1 DAY
GROUP BY CustomerId
您可以在这里全部尝试。 https://www.db-fiddle.com/f/riyXu8MVjJKNWfWVQLmjUG/0
专业提示:到现在为止,显而易见的是,在进行此类操作时,将日期存储在 SELECT CustomerId, CustomerCount, 12MonthOrderCount
FROM ( /* the query showing the full year data */ ) yr
FROM ( /* the query showing the month data */ ) mon ON yr.CustomerId=mo.CustomerId
列中可以使工作变得更加轻松。
答案 5 :(得分:0)
您可以使用以下代码获得所需的结果。
select count (distinct CustomerID) as 'CustomerCount', count (OrderID) as '12MonthOrderCount'
from orders
where (OrderDate <= '2017-01-01' AND OrderDate >= '2016-01-01')