18

在 mySQL 中,我想返回start_date在当年(如 2012 年,而不是在过去一年时间段内)的记录计数和(作为单独的查询)来自前一年(现在的情况是 2011 年)。

我的开始日期是这样存储的:2012-12-02。我正在使用 PHP。

非常感谢我如何形成这些查询的帮助。

4

3 回答 3

37
SELECT COUNT(*)
 FROM TABLE1
 WHERE YEAR(START_DATE) = YEAR(CURDATE()); 
于 2012-11-27T20:00:33.357 回答
8

您可能希望使用YEAR函数从日期中获取 YEAR 并使用相同的比较。

 SELECT COUNT(*)
 FROM TABLE1
 WHERE YEAR(START_DATE) = 2012;

与上一年分开查询:

 SELECT COUNT(*)
 FROM TABLE1
 WHERE YEAR(START_DATE) = 2011;

要获得明智的年份计数:

 SELECT COUNT(b.YEAR), b.YEAR
 FROM TABLE1 AS a JOIN 
    (SELECT DISTINCT YEAR(START_DATE) AS YEAR from TABLE1) AS b
    ON YEAR(START_DATE) = b.YEAR
 GROUP BY b.YEAR;
于 2012-11-27T19:58:28.927 回答
2

两个建议:

您可以使用日期过滤数据:

select count(*) from tbl where start_date >= '2012-01-01'

或者

select count(*) from tbl where start_date between '2012-01-01' and '2012-12-31'

此外,您可以使用以下year()功能过滤数据:

select count(*) from tbl where year(start_date) = 2012

希望这可以帮助你


如果您使用 PHP(或任何其他高级编程语言),您可以在运行时构建您的查询字符串以满足您的需求(例如过滤不同年份的记录)。

要显示 2012 年之前的记录数start_date,只需更改where条件:

select... where year(start_date) < 2012

或者

select... where start_date < '2012-01-01'
于 2012-11-27T20:00:26.090 回答