3个日期范围之间的Mysql查询

     2023-04-14     128

关键词:

【中文标题】3个日期范围之间的Mysql查询【英文标题】:Mysql query between 3 date ranges 【发布时间】:2013-02-11 06:57:59 【问题描述】:

我有一个允许用户生成报告的 php 脚本,他们可以选择 3 个日期范围。 即

2012-01-01 to 2012-01-31
AND 
2011-01-01 to 2011-01-31
AND 
2010-01-01 to 2010-01-31

但是当我进行查询时,在某个日期范围内没有记录时,查询不会返回任何值。

这是我的查询:

 SELECT DealerName WHERE InterviewDate >= "2012/01/01 " AND InterviewDate <= " 2012/03/31"
 AND InterviewDate >= "2012/07/01 " AND InterviewDate <= " 2012/09/31"

我需要一个查询,如果在其中一个日期范围内找到数据,则无论后续日期范围内是否没有数据,它都会返回数据。

数据被汇总到一个表格中,同一数据可能出现在多个日期。

例如:

dealerName 1    2012-01-01
dealerName 1    2012-02-31
dealerName 2    2012-03-01
dealerName 1    2012-06-01
dealerName 1    2012-06-31

所以如果我想查询 2012-01-01 和 2012-02-31 AND 2012-06-01 AND 2012-06-31 之间的数据。我意识到 1 个日期范围可以包含所有这些范围,但用户可能希望排除这两个日期范围之间的数据。

【问题讨论】:

【参考方案1】:

面试日期不能介于 x 和 y 之间,并且仍然介于 z 和 zz 之间。您缺少OR - 另外,请查看BETWEEN 运算符

SELECT DealerName
FROM table
WHERE InterviewDate BETWEEN '2012-01-01' AND '2012-01-31'
    OR InterviewDate BETWEEN '2011-01-01' AND '2011-01-31'
    OR InterviewDate BETWEEN '2010-01-01' AND '2010-01-31'

编辑,对不起,错过了表名:)

【讨论】:

@HamletHakobyan 手指快速大脑,错过了 FROM 子句 :) 谢谢! 数据汇总到一个表格中,记录可能出现在多个日期。 @user1882752 一个单行不能在多个范围之间,因为它们不重叠。假设你穿了一件红衬衫。哪个论述是对的? “你有一件红色衬衫和一件绿色衬衫和一件蓝色衬衫”或“你有一件红色衬衫或一件绿色衬衫或一件蓝色衬衫”? @hank 谢谢,这行得通。 (因为没有看到明显的东西,我已经多次拍自己的脸)【参考方案2】:

为什么不使用 OR 而不是 AND ?

SELECT DealerName WHERE ( InterviewDate >= "2012/01/01 " AND InterviewDate <= " 2012/03/31" )  OR ( InterviewDate >= "2012/07/01 " AND InterviewDate <= " 2012/09/31" )

【讨论】:

【参考方案3】:

您需要使用OR 而不是AND

WHERE   (InterviewDate BETWEEN '2012-01-01' AND '2012-01-31')
        OR
        (InterviewDate BETWEEN '2011-01-01' AND '2011-01-31')
        OR
        (InterviewDate BETWEEN '2010-01-01' AND '2010-01-31')

更新 1

我认为你有Relational Division 的问题,

SELECT name
FROM   table1
WHERE  DATE BETWEEN '2012-01-01' AND '2012-02-31'
       OR
       DATE BETWEEN '2012-06-01' AND '2012-06-31'
GROUP BY name
HAVING COUNT(*) = 2

SQLFiddle Demo

SQL of Relational Division

【讨论】:

不会占用 1 个范围或另一个,而不是两者? 我有一个问题要问你,假设你有一个InterviewDate2012-01-15,它怎么会出现在20112010 的年份? 我认为括号是多余的。 @HamletHakobyan 是的,但这是为了清楚起见。无论如何它不会影响性能。 @JW,我已经编辑了关于数据如何重复的说明【参考方案4】:

使用OR 而不是AND

SELECT DealerName FROM tbl
WHERE InterviewDate >= '2012/01/01' AND InterviewDate <= '2012/03/31'
 OR InterviewDate >= '2012/07/01' AND InterviewDate <= '2012/09/31'

【讨论】:

问题是我需要查询所有范围的数据库,而不仅仅是一组范围 @user1882752 当然,对于所有范围。此查询将返回属于任何范围的所有行。【参考方案5】:

这是我的收获 :) 因为您正在检查 1 月的 month 是否有 year 2010、2011、2012。我们可以使用 MONTHYEAR 函数。

SELECT DealerName
FROM yourtable
WHERE Month(InterviewDate) = 1
AND Year(InterviewDate) IN (2010, 2011, 2012)
;

SELECT DealerName
FROM yourtable
WHERE Month(InterviewDate) IN (1, 2) // if there are particular months
AND Year(InterviewDate) IN (2010, 2011, 2012)
;

【讨论】:

请在index 部分启发我。为什么说它会杀死索引?我没有看到 OP 提到了 index 列。

固定日期范围之间的 MySQL 记录

】固定日期范围之间的MySQL记录【英文标题】:MySQLrecordbetweenfixeddaterange【发布时间】:2018-04-2619:45:01【问题描述】:我有一个使用CodeIgniter3构建的小型应用程序,需要执行一个将转换为Chart.js的报告。该报告应以年度为基础,但... 查看详情

MySQL:查找日期范围之间的缺失日期

】MySQL:查找日期范围之间的缺失日期【英文标题】:MySQL:FindMissingDatesBetweenaDateRange【发布时间】:2011-07-0117:19:40【问题描述】:我需要一些有关mysql查询的帮助。我有db表,其中包含2011年1月1日至2011年4月30日的数据。每个日期... 查看详情

MySQL 查询结果与 2 个日期之间的工作日

】MySQL查询结果与2个日期之间的工作日【英文标题】:MySQLqueryresultswithweekdaybetween2dates【发布时间】:2013-07-1509:22:57【问题描述】:我需要一个查询来从一个有2列的表中获取结果列startdt(日期时间),列enddt(日期时间)有一些... 查看详情

我如何查询给定日期范围的mysql并加入两个表?

】我如何查询给定日期范围的mysql并加入两个表?【英文标题】:howIquerymysqlgivendaterangeandjoinedtwotables?【发布时间】:2018-10-1118:39:43【问题描述】:假设我有两张桌子,一间是租来的。如何获得如下表所示的mysql连接结果。在给定... 查看详情

AWS RDS MySql 具有复合索引和日期范围的简单查询在大约 800 万个数据中执行时间过长

】AWSRDSMySql具有复合索引和日期范围的简单查询在大约800万个数据中执行时间过长【英文标题】:AWSRDSMySqlSimplequerywithcompositeindexanddaterangetooktoolongtoexecuteoutof~8millionsdata【发布时间】:2020-04-1617:50:49【问题描述】:查询非常简单,... 查看详情

在日期范围之间使用 TOPCOUNT 的 MDX 查询返回带有一些空值的顶部

】在日期范围之间使用TOPCOUNT的MDX查询返回带有一些空值的顶部【英文标题】:MDXquerywithTOPCOUNTbetweendaterangereturningatopwithsomeemptyvalues【发布时间】:2014-05-1413:49:46【问题描述】:我正在使用MDX查询来获取两个日期之间最喜欢的10个... 查看详情

PHP/MySQL:对数据库中的重复事件进行建模,但查询日期范围

】PHP/MySQL:对数据库中的重复事件进行建模,但查询日期范围【英文标题】:PHP/MySQL:Modelrepeatingeventsinadatabasebutqueryfordateranges【发布时间】:2012-11-2722:29:12【问题描述】:我正在开发一个(我打算成为的)简单的PHP/MySQL应用程序... 查看详情

SQL 之间的日期范围查询适用于某些表,但不适用于其他表

】SQL之间的日期范围查询适用于某些表,但不适用于其他表【英文标题】:SQLBetweenDateRangequeryworkingforsometables,butnotothers【发布时间】:2017-03-0810:29:00【问题描述】:我有6个数据库表,存储有关佣金率的信息,以及根据客户/供应... 查看详情

日期范围之间的 MySQL

】日期范围之间的MySQL【英文标题】:MySQLBETWEENDATERANGE【发布时间】:2013-01-0302:25:34【问题描述】:我有一种情况需要根据下表提取交货日期(示例)job_id|delivery_date1|2013-01-122|2013-01-253|2013-02-15我要做的是向用户显示所有从最早... 查看详情

Mysql查询 - 返回两个日期范围相交的日期

】Mysql查询-返回两个日期范围相交的日期【英文标题】:Mysqlquery-Returndateswheretwodaterangesintersect【发布时间】:2021-01-2620:21:40【问题描述】:我正在尝试编写一个MySql查询,其中两个日期范围相交。例如,我想从存在给定日期的表... 查看详情

日期范围之间的 Postgresql 查询

】日期范围之间的Postgresql查询【英文标题】:Postgresqlquerybetweendateranges【发布时间】:2014-06-1316:44:15【问题描述】:我正在尝试查询我的postgresql数据库以返回日期在特定月份和年份的结果。换句话说,我想要一个月的所有值。... 查看详情

检查日期是不是在 sql 中的日期范围之间(不检查年份)

】检查日期是不是在sql中的日期范围之间(不检查年份)【英文标题】:checkifdatesarebetweendaterangeinsql(checkwithoutyear)检查日期是否在sql中的日期范围之间(不检查年份)【发布时间】:2012-05-1505:35:29【问题描述】:我正在开发一个... 查看详情

MariaDB中日期范围和时间范围之间的SQL查询

】MariaDB中日期范围和时间范围之间的SQL查询【英文标题】:SQLQuerybetweenadaterangeandatimerangeinMariaDB【发布时间】:2021-11-1505:04:54【问题描述】:我无法编写此查询以提供任何结果。我也在使用MariaDB。SELECTCallDateASWeek_Of,AgentName,COUNT(*... 查看详情

MySQL:选择两个日期范围内的所有数据

】MySQL:选择两个日期范围内的所有数据【英文标题】:MySQL:Selectalldatabetweenrangeoftwodates【发布时间】:2014-04-1709:20:58【问题描述】:如何进行查询以选择两个日期之间的所有内容。SELECT*FROMapplicationsWHERE`datum`>=\'2013-11%\'AND`datum`... 查看详情

在日期/时间范围之间选择数据

】在日期/时间范围之间选择数据【英文标题】:Selectdatabetweenadate/timerange【发布时间】:2013-03-2703:04:01【问题描述】:如何在MySQL中选择日期范围内的数据。我的datetime列采用24小时祖鲁时间格式。select*fromhockey_statswheregame_datebetwe... 查看详情

用于获取多个日期范围的 mysql 查询

】用于获取多个日期范围的mysql查询【英文标题】:mysqlqueryforgrabbingmultipledateranges【发布时间】:2016-03-0104:06:07【问题描述】:我似乎在提出查询以实现我想要的结果时遇到了一些麻烦。我有一张如下表..|Date(TIMESTAMP)|Count||--------... 查看详情

使用未在 Mysql 中排序的多个日期范围查询给定月份的日期范围间隙

】使用未在Mysql中排序的多个日期范围查询给定月份的日期范围间隙【英文标题】:QueryforgapsindaterangesforgivenmonthwithmultipledaterangeswhicharenotsortedinMysql【发布时间】:2021-05-0819:27:26【问题描述】:我有一个非常棘手的日历间隙项目... 查看详情

SQL 之间不包括所有查询范围(日期)

】SQL之间不包括所有查询范围(日期)【英文标题】:SQLbetweennotincludeallrangeofquery(date)【发布时间】:2014-09-1615:25:52【问题描述】:我有以下结构的表:我正在尝试获取两个日期之间的分组值,问题是结果不包含日期为2014-09-05的... 查看详情