【问题标题】:Return all mySQL Records for Current Year返回当前年份的所有 mySQL 记录
【发布时间】:2016-05-04 00:24:58
【问题描述】:

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

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

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

【问题讨论】:

    标签: mysql


    【解决方案1】:
    SELECT COUNT(*)
     FROM TABLE1
     WHERE YEAR(START_DATE) = YEAR(CURDATE()); 
    

    【讨论】:

    • 不确定这是一个好的决定。如果您在 START_DATE 有索引,它将不起作用。最好在适当的条件下进行所有准备。像这样的东西 START_DATE > DATE_FORMAT(NOW() ,'%Y-01-01 00:00:01')
    【解决方案2】:

    您可能希望使用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;
    

    【讨论】:

    • 但这需要我每年手动更改硬编码年份。我希望那一点是自动的。
    • WHERE YEAR(START_DATE) = YEAR(NOW())
    • 可以将查询中的2012或2011设置为PHP内部的变量,这样会自动/动态。
    • @user1857692 您要求单独查询as a separate query,因此是这样。让我用逐年计数来更新答案。
    【解决方案3】:

    两个建议:

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

    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'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-26
      • 2023-04-11
      • 2012-11-23
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 2020-10-07
      相关资源
      最近更新 更多