Php 如何获取本年度中每个月的计数?

Php 如何获取本年度中每个月的计数?,php,mysql,sql,date,Php,Mysql,Sql,Date,我需要得到今年每月的行数。我有一个SQL数据库,其中包含格式为2018-10-10(年-月日期)的日期。 看,我写了这个SQL请求,结果是: SELECT distinct extract(month from reg_date) as Months, COUNT(*) as RegCount FROM Orders GROUP BY Months 正如你所看到的,我有所有的月份和他们的计数。但我只需要今年的数据。如何整合此条件 重复:我需要当前年度每月的行数 谢谢 执

我需要得到今年每月的行数。我有一个SQL数据库,其中包含格式为
2018-10-10
(年-月日期)的日期。 看,我写了这个SQL请求,结果是:

SELECT distinct extract(month from reg_date) as Months, 
       COUNT(*) as RegCount 
FROM Orders 
GROUP BY Months

正如你所看到的,我有所有的月份和他们的计数。但我只需要今年的数据。如何整合此条件

重复:我需要当前年度每月的行数

谢谢

  • 执行
    分组方式时,不需要使用
    Distinct
  • 我们可以使用和函数分别从日期中提取月份和年份
<>为了仅考虑当前年的行,我们可以使用:

WHERE YEAR(reg_date) = YEAR(CURDATE())
但是,在
Where
子句中的列上使用函数会妨碍在
reg\u date
列上使用索引(如果已定义)。因此,我们可以使用以下方法:

WHERE reg_date BETWEEN '2018-01-01' AND '2018-12-31'
WHERE reg_date 
      BETWEEN MAKEDATE(YEAR(CURDATE()), 1) AND 
              LAST_DAY(DATE_ADD(NOW(), INTERVAL 12-MONTH(NOW()) MONTH))
为了使其更通用(年号不可知),我们可以执行以下操作:

WHERE reg_date BETWEEN '2018-01-01' AND '2018-12-31'
WHERE reg_date 
      BETWEEN MAKEDATE(YEAR(CURDATE()), 1) AND 
              LAST_DAY(DATE_ADD(NOW(), INTERVAL 12-MONTH(NOW()) MONTH))
或者

请尝试以下查询:

SELECT MONTH(reg_date) AS Months, 
       COUNT(*) AS RegCount 
FROM Orders 
WHERE reg_date 
      BETWEEN MAKEDATE(YEAR(CURDATE()), 1) AND 
              MAKEDATE(YEAR(CURDATE()), IF(MOD(YEAR(CURDATE()), 4), 365, 366))
GROUP BY Months

添加一个where条件….
where YEAR(reg\u date)=YEAR(CURDATE())
非常确定您可以使用
MONTH(reg\u date)
而不是提取为well@RiggsFolly谢谢:D@RiggsFolly我将使用“2018-01-01”和“2018-12-31”之间的
注册日期,以便能够使用注册日期索引(如有)@马克西梅皮欣从未使用过它。但问题是什么?我可以试着弄清楚。看,我有两个请求:
Yii::$app->db->createCommand('SELECT MONTH(regu-date)AS MONTH,COUNT(*)AS RegCount FROM YEAR(regu-date)=YEAR(NOW())ORDER BY MONTH')->queryal()->有一些数据,但在
$this->find()->中选择(['MONTH(regu-date)AS Months',COUNT(*)AS RegCount'])->其中(['YEAR(regu-date)=>'YEAR(NOW()))->groupBy('Months')->all()->什么都没有。。。为什么?来自模型用户的请求@马克西梅皮欣-嗯-不过看起来都一样。对不起,不知道为什么会这样。也许有一些小把戏。您可以向SO社区提出一个新问题。