Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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_Date_Count_Sum - Fatal编程技术网

Mysql 连续日期的计数总和

Mysql 连续日期的计数总和,mysql,date,count,sum,Mysql,Date,Count,Sum,我需要得到每个月一个项目的总数 到目前为止,使用以下代码: Select Count(mpay_collector_company.id) As `Number of Collector Companies`, Month(mpay_collector_company.created_at) As Month, Year(mpay_collector_company.created_at) As Year From mpay_collector_company Group By Mont

我需要得到每个月一个项目的总数

到目前为止,使用以下代码:

Select Count(mpay_collector_company.id) As `Number of Collector Companies`,
  Month(mpay_collector_company.created_at) As Month,
  Year(mpay_collector_company.created_at) As Year
From mpay_collector_company
Group By Month(mpay_collector_company.created_at),
  Year(mpay_collector_company.created_at)
我有以下回应:

#|Year|Month
------------
5|2014|11
3|2014|12
3|2015|1
7|2015|2
6|2015|3
2|2015|4
5|2015|6
1|2015|7
我希望得到的不是每个月的数字,而是每个月开始时的总和,大致如下:

Sum|Year|Month
--------------
  5|2014|11
  8|2014|12
 11|2015|1
 18|2015|2
 24|2015|3
 26|2015|4
 31|2015|6
 32|2015|7
有什么想法吗


编辑:此请求将作为一个视图实现,因此子请求几乎是一个禁忌:x

您可以首先选择不同的year.month,然后检查每个值的计数

select year,month , 
    ( SELECT count(*) FROM mpay_collector_company WHERE 
        Year(mpay_collector_company.created_at) <= temp1.year 
        AND 
        Month(mpay_collector_company.created_at) <= temp1.month 
    )
from (
Select DISTINCT 
    Month(mpay_collector_company.created_at) As month,
    Year(mpay_collector_company.created_at) As year
From mpay_collector_company 
) as temp1
ORDER BY year,month
如果您想每年重置,只需将比较更改为“年与年之间相等”,即可

select year,month , 
    ( SELECT count(*) FROM mpay_collector_company WHERE 
        Year(mpay_collector_company.created_at) = temp1.year 
        AND 
        Month(mpay_collector_company.created_at) <= temp1.month 
    )
from (
Select DISTINCT 
    Month(mpay_collector_company.created_at) As month,
    Year(mpay_collector_company.created_at) As year
From mpay_collector_company 
) as temp1
ORDER BY year,month

您可以先选择不同的年.月,然后检查每个值的计数

select year,month , 
    ( SELECT count(*) FROM mpay_collector_company WHERE 
        Year(mpay_collector_company.created_at) <= temp1.year 
        AND 
        Month(mpay_collector_company.created_at) <= temp1.month 
    )
from (
Select DISTINCT 
    Month(mpay_collector_company.created_at) As month,
    Year(mpay_collector_company.created_at) As year
From mpay_collector_company 
) as temp1
ORDER BY year,month
如果您想每年重置,只需将比较更改为“年与年之间相等”,即可

select year,month , 
    ( SELECT count(*) FROM mpay_collector_company WHERE 
        Year(mpay_collector_company.created_at) = temp1.year 
        AND 
        Month(mpay_collector_company.created_at) <= temp1.month 
    )
from (
Select DISTINCT 
    Month(mpay_collector_company.created_at) As month,
    Year(mpay_collector_company.created_at) As year
From mpay_collector_company 
) as temp1
ORDER BY year,month

使用相关子查询计算日期早于当前查询的行数也应该有效:

Select 
  Count(id) As "Number of Collector Companies",
  Month(created_at) As Month,
  Year(created_at) As Year,
  (
    Select Count(*) 
    From mpay_collector_company 
    Where EXTRACT(YEAR_MONTH from created_at) <= EXTRACT(YEAR_MONTH from m.created_at)     
  ) as running_count
From mpay_collector_company m
Group By Year(created_at), Month(created_at);

在操作中显示它

使用相关子查询计算日期早于当前日期的行数也应该有效:

Select 
  Count(id) As "Number of Collector Companies",
  Month(created_at) As Month,
  Year(created_at) As Year,
  (
    Select Count(*) 
    From mpay_collector_company 
    Where EXTRACT(YEAR_MONTH from created_at) <= EXTRACT(YEAR_MONTH from m.created_at)     
  ) as running_count
From mpay_collector_company m
Group By Year(created_at), Month(created_at);

在行动中展示它

类似的东西可能会奏效:

Select Count(distinct previous_mpay_collector_company.id)+ Count(distinct mpay_collector_company.id) As `Number of Collector Companies`,
       Month(mpay_collector_company.created_at) As Month,
       Year(mpay_collector_company.created_at) As Year
From mpay_collector_company
  Left Join mpay_collector_company previous_mpay_collector_company
    On   Year(mpay_collector_company.created_at) > Year(previous_mpay_collector_company.created_at)
 OR (Month(mpay_collector_company.created_at) > Month(previous_mpay_collector_company.created_at)
         And  Year(mpay_collector_company.created_at) >= Year(previous_mpay_collector_company.created_at))
  And previous_mpay_collector_company.id <> mpay_collector_company.id
Group By Month(mpay_collector_company.created_at),
Year(mpay_collector_company.created_at);

诀窍是自动加入前几个月的所有数据,并从加入的表中计数。

类似的方法可能会奏效:

Select Count(distinct previous_mpay_collector_company.id)+ Count(distinct mpay_collector_company.id) As `Number of Collector Companies`,
       Month(mpay_collector_company.created_at) As Month,
       Year(mpay_collector_company.created_at) As Year
From mpay_collector_company
  Left Join mpay_collector_company previous_mpay_collector_company
    On   Year(mpay_collector_company.created_at) > Year(previous_mpay_collector_company.created_at)
 OR (Month(mpay_collector_company.created_at) > Month(previous_mpay_collector_company.created_at)
         And  Year(mpay_collector_company.created_at) >= Year(previous_mpay_collector_company.created_at))
  And previous_mpay_collector_company.id <> mpay_collector_company.id
Group By Month(mpay_collector_company.created_at),
Year(mpay_collector_company.created_at);
    Select 
(Select Sum(Count(Z.id)) FROM mpay_collector_company z 
where  z.created_at <= A.created_at) as '#', 
  Month(A.created_at) As Month,
  Year(A.created_at) As Year
From mpay_collector_company A
Group By Month(mpay_collector_company.created_at),
  Year(mpay_collector_company.created_at)
诀窍是自动加入前几个月的所有数据,并从已加入的表中进行计数

    Select 
(Select Sum(Count(Z.id)) FROM mpay_collector_company z 
where  z.created_at <= A.created_at) as '#', 
  Month(A.created_at) As Month,
  Year(A.created_at) As Year
From mpay_collector_company A
Group By Month(mpay_collector_company.created_at),
  Year(mpay_collector_company.created_at)
这应该对你有好处


这应该能帮你,这是一个很好的开始,谢谢你!然而,结果是2014年的总和,然后在2015年重置,这意味着我得到了20145->8->20153->10->16。。。不是20145->8->201511->18->24…我已经为您更新了我的答案,带有重置查询。这是一个非常好的开始,谢谢您!然而,结果是2014年的总和,然后在2015年重置,这意味着我得到了20145->8->20153->10->16。。。不是20145->8->201511->18->24…我已经为您更新了我的答案,重置查询我在计数中得到了非常愚蠢的结果,但是我喜欢这个解决方案,因为我需要将其实现为一个视图,所以子请求并不是一件好事:pAlright,给我一秒钟,我将创建一些测试数据。该查询有点失控,但我在插入一些测试数据后编辑了我的答案。顺便说一句,如果您担心性能,那么加入函数是不可能的,因为MySQL将无法使用索引。感谢您的时间,我将在周一与您联系。我所有的东西都在工作,我刚刚回家过了一个轻松的周末^^我在计数中得到了非常愚蠢的结果,但是我喜欢这个解决方案,因为我需要将其作为一个视图来实现,所以子请求对于这一点来说并不是一件好事:好吧,给我一点时间,我将创建一些测试数据。那个查询有点失控,但是我在插入了一些测试数据后编辑了我的答案。顺便说一句,如果你担心性能,那么加入函数是不行的,因为MySQL将无法使用索引。谢谢你的时间,我会在周一回复你。我工作时什么都有,我刚回家过了一个轻松的周末