Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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
Mysql实时查询_Mysql_Sql Server - Fatal编程技术网

Mysql实时查询

Mysql实时查询,mysql,sql-server,Mysql,Sql Server,我需要一些帮助来组织时间查询。我需要其中的一些,但我认为如果我能被展示如何做一个,我就能找出其他的 我想要的是: -“非活动账户”的滚动12个月视图…即在前12个月内未下订单的账户数量。 -理想情况下,这将是一个子查询(在更大的脚本中)连接回日期表(见下文) 我脑子里想不清楚的是如何构造where子句,以确保它扫描所有订单,只返回该月前一年未下订单的帐户ID的总数。我使用了DATEDIFF、DATESUB等的不同组合 SELECT DATE_FORMAT(order_datetime, '%Y-

我需要一些帮助来组织时间查询。我需要其中的一些,但我认为如果我能被展示如何做一个,我就能找出其他的

我想要的是: -“非活动账户”的滚动12个月视图…即在前12个月内未下订单的账户数量。 -理想情况下,这将是一个子查询(在更大的脚本中)连接回日期表(见下文)

我脑子里想不清楚的是如何构造where子句,以确保它扫描所有订单,只返回该月前一年未下订单的帐户ID的总数。我使用了DATEDIFF、DATESUB等的不同组合

SELECT DATE_FORMAT(order_datetime, '%Y-%m'), COUNT DISTINCT (account_id)
FROM warehouse.orders
JOIN warehouse.accounts ON xyz
WHERE...
我感觉自己走在正确的道路上——我只是在脑子里不断地转圈子,试图弄明白这一点


干杯并提前表示感谢

我没有足够的声望来简单地评论你的问题。但我并不完全理解

您使用的是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
选择SUM(当DATEDIFF(y,GETDATE(),order\u date\u time)小于1时的情况),然后将其计数(不同的帐户\u id)结束)为2015年1月
如果您使用的是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
选择SUM(当DATEDIFF(y,DATEADD(M,DATEDIFF(M,0,GETDATE()),0),order\u date\u time)<1,然后将计数(不同帐户id)结束时的情况)作为2015年1月2日

如果我完全忽略了这一点,请让我知道,我会很高兴地修改答案,您应该在日期之间查询,以便获得每个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) 
选择案例
当计数(帐户id)为0时,则为“活动”
来自仓库的订单
其中数据格式(订单日期时间,%m/%Y)介于“2014年1月”和“2015年1月”之间
按帐户分组(id)

谢谢您的帮助。我想我已经提到我正在使用MySQL,我想不是。我的错误。我正在寻找一个专栏加入到,或分组到,月-其中会说,在过去的一年中没有放置的客户总数
示例:
2015年1月| 1095
从2014年1月到2015年1月,我们的1095名客户没有下订单。现在,必须有另一个where条款,以确保创建_日期不超过所讨论的月份(因为我们无法将2016年获得的客户计算为2015年没有下订单)。不,您在标题中提到过,但它被标记为sqlserver。我离了解你的要求更近了一点——第一次我离你很远。你能澄清一下吗?你想在任何月份之前的12个月内报告没有订单的情况,还是仅在本月?如果您需要能够报告上一年任何月份未下订单的帐户数,那么它会稍微复杂一些,因为您需要一个日历表。但这两种方式都是绝对可能的。我正在寻找一个12个月的滚动12个月的看法。(满嘴…)基本上我有一个很长的脚本,有一系列不同的度量通过以下方式连接到日期表:
其中DATE\u格式(d.created\u DATE,%Y-%m-%d')介于DATE\u SUB(CURDATE(),INTERVAL 12 MONTH)和DATE\u SUB(CURDATE(),INTERVAL 1 MONTH)之间。
因此,因为参数大约是CURDATE(),从报告运行的月份开始,它只提供前12个完整月份的结果。对于这12个完整月份中的每一个月份,我都需要在给定月份之前的一年中没有下订单的客户数量。我们将不活跃定义为在给定年份中没有下订单的客户-因此我尝试按月显示“不活跃”的客户数再次感谢您的帮助
 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)