我需要获取当前年度每月的行数。我有带有字段reg_date的SQL数据库,其中包含格式为2018-10-10
(年月日)的日期。
看,我写了这个SQL请求并得到结果:
SELECT distinct extract(month from reg_date) as Months,
COUNT(*) as RegCount
FROM Orders
GROUP BY Months
如您所见,我拥有全部月份及其计数。但是我只需要本年度的数据。如何整合这种情况?
重复:我需要当前年度每月的行数。
谢谢!
答案 0 :(得分:1)
为了只考虑当年的行,我们可以使用:
WHERE YEAR(reg_date) = YEAR(CURDATE())
但是,在Where
子句中的列上使用函数会妨碍在reg_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))
OR,
WHERE reg_date
BETWEEN MAKEDATE(YEAR(CURDATE()), 1) AND
MAKEDATE(YEAR(CURDATE()), IF(MOD(YEAR(CURDATE()), 4), 365, 366))
请尝试以下查询:
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