首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql实时查询

Mysql实时查询
EN

Stack Overflow用户
提问于 2016-01-17 23:30:01
回答 2查看 42关注 0票数 0

我需要一些帮助来组织即时查询。有几个是我需要的--但我想,如果有人教我怎么做,我就能搞清楚其他的。

我的追求:-Rolling 12个月的‘非活跃帐户’的看法...即在12个月前没有下订单的帐户数量。理想情况下,-This是一个子查询(在一个大得多的脚本中),它连接回一个dates表(如下所示)

代码语言:javascript
复制
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等的不同组合。

代码语言:javascript
复制
SELECT DATE_FORMAT(order_datetime, '%Y-%m'), COUNT DISTINCT (account_id)
FROM warehouse.orders
JOIN warehouse.accounts ON xyz
WHERE...

感觉我走在了正确的道路上--我只是在脑海中不停地绕圈,试图弄清楚这一点。

提前干杯并致谢。

EN

回答 2

Stack Overflow用户

发布于 2016-01-18 03:28:00

我没有足够的名誉点来简单地评论你的问题。不过,我并不完全理解它。

您使用的是SQLServer/TSQL还是MySQL?

您是希望只有一列来计算过去12个月的滚动平均值,还是希望每月有12列来计算滚动平均值?如果它只是过去12个月的一个数字,你希望它是从当天还是当月初开始计算?

如果是SQL Server,从现在算起的12个月内,计算结果可能是:

代码语言:javascript
复制
SELECT SUM(CASE WHEN DATEDIFF(y,GETDATE(),order_date_time) < 1 THEN COUNT(DISTINCT account_id) END) as January2015

如果您正在使用MySQL,请将GETDATE()替换为NOW()

如果您希望将一个值滚动到月初,则可以使用:

代码语言:javascript
复制
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

如果我完全弄错了,请让我知道,我会很乐意修改答案的

票数 0
EN

Stack Overflow用户

发布于 2016-01-18 03:43:05

您应该在两个日期之间进行查询,以便获得每个id的事件计数。

代码语言:javascript
复制
 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) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34840076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档