我需要一些帮助来组织即时查询。有几个是我需要的--但我想,如果有人教我怎么做,我就能搞清楚其他的。
我的追求:-Rolling 12个月的‘非活跃帐户’的看法...即在12个月前没有下订单的帐户数量。理想情况下,-This是一个子查询(在一个大得多的脚本中),它连接回一个dates表(如下所示)
January 2015 | # of customers with no orders from 1/2014-1/2015
February 2015 | # of customers with no orders from 2/2014-2/2015
March 2015 | # of customers with no orders from 3/2014-3/2015
etc...我遇到的麻烦是,我如何构造where子句,以确保它扫描所有订单,并仅返回该月前一年未下订单的帐户ID总数。我使用了DATEDIFF、DATESUB等的不同组合。
SELECT DATE_FORMAT(order_datetime, '%Y-%m'), COUNT DISTINCT (account_id)
FROM warehouse.orders
JOIN warehouse.accounts ON xyz
WHERE...感觉我走在了正确的道路上--我只是在脑海中不停地绕圈,试图弄清楚这一点。
提前干杯并致谢。
发布于 2016-01-18 03:28:00
我没有足够的名誉点来简单地评论你的问题。不过,我并不完全理解它。
您使用的是SQLServer/TSQL还是MySQL?
您是希望只有一列来计算过去12个月的滚动平均值,还是希望每月有12列来计算滚动平均值?如果它只是过去12个月的一个数字,你希望它是从当天还是当月初开始计算?
如果是SQL Server,从现在算起的12个月内,计算结果可能是:
SELECT SUM(CASE WHEN DATEDIFF(y,GETDATE(),order_date_time) < 1 THEN COUNT(DISTINCT account_id) END) as January2015如果您正在使用MySQL,请将GETDATE()替换为NOW()
如果您希望将一个值滚动到月初,则可以使用:
SELECT SUM(CASE WHEN DATEDIFF(y,DATEADD(M, DATEDIFF(M, 0, GETDATE()), 0),order_date_time) < 1 THEN COUNT(DISTINCT account_id) END) as January2015如果我完全弄错了,请让我知道,我会很乐意修改答案的
发布于 2016-01-18 03:43:05
您应该在两个日期之间进行查询,以便获得每个id的事件计数。
select case
when count(account_id)<0 then 'INACTIVE'
when count(account_id)>0 then 'ACTIVE'
from warehouse.orders
where data_format(order_datetime, '%m/%Y') between '1/2014' and '1/2015'
group by account_id) https://stackoverflow.com/questions/34840076
复制相似问题