【问题标题】:Complex Queries range dates复杂查询范围日期
【发布时间】:2018-01-20 09:39:59
【问题描述】:

mySQL 日期时间范围查询问题

如何在 2017 年 8 月 7 日等同一日期获得 2017 年的处理器计数


date         | name      
-----------------------
 2017-08-31   |  amr
-----------------------
 2017-08-05   |  ahmed
----------------- -----
     2018-08-08   | moh

how get 2017-01-01 BETWEEN 2017-12-31
------------------------
count         | date      
-----------------------
 2            |  2017
-----------------------
     1            | 2018
  SELECT  count(*)
    FROM item WHERE  
    date IN 
    ( SELECT  date 
     FROM item WHERE 
     (BETWEEN '2017-03-15' AND '2017-09-31')) 

【问题讨论】:

  • 没有我的问题
  • @AmrEssam 怎么样?更新您的问题以说明它为何不同。
  • @DuaneLortie 适当的操作是单击帖子下方的“标记”,然后转到“重复...”,您将在其中发布链接。这会标记问题并使其更快得到解决。

标签: php mysql phpmyadmin


【解决方案1】:

我找不到你的副本,但我确定在某个地方有一个。

如果你使用GROUP BYDATE_FORMAT()函数,你可以COUNT()每个组中的出现。

SELECT COUNT(*),DATE_FORMAT(`date`,'%Y') FROM `item` GROUP BY DATE_FORMAT(`date`,'%Y');

如果您需要省略某些时间范围,您可以在GROUP BY 之前包含一个WHERE 子句。

【讨论】:

    【解决方案2】:

    BETWEEN 是一种“三元”运算符,形式为x BETWEEN y AND z

    你想要:

    `date` BETWEEN '2017-03-15' AND '2017-09-31'
    

    【讨论】:

    • date 在“2017-03-15”和“2017-09-31”之间和date在“2018-03-15”和“2018-09-31”之间
    • 你需要“或”而不是“和”;单个日期不能在多个不重叠的日期范围内,1-3 和 3-4 中的日期范围不得超过 2 个。
    【解决方案3】:

    1、date 是 MySQL 的保留字。最好将您的列命名为其他名称,但如果您还指定表名,例如table.date

    ,则可以使用它

    2、不需要子查询。 MySQL 可以在一个查询中完成此操作

    SELECT count(`table.name`) as NUMBER, YEAR(`table.date`) as YR FROM item WHERE DATE(`table.date`) BETWEEN '2017-01-01' AND '2017-12-31'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      • 2019-08-16
      相关资源
      最近更新 更多