当前位置: 首页 > 知识库问答 >
问题:

MySQL:获取日期的min和mx

隆宏爽
2023-03-14

我需要激发一个查询来检索from_date的最小值和to_date的最大值。我的数据如下:

+--------------------------------------+--------------------------------------+---------------------+---------------------+
| user_id                              | point_id                             |         from_date   | to_date             |
+--------------------------------------+--------------------------------------+---------------------+---------------------+
| 1e159ee9-0856-4ea8-88ab-4c0862f667af | c54c3bea-46e8-4377-bfa0-3a03c7abbafa | 2007-07-31 00:00:00 | 2012-04-08 00:00:00 |
| 1e159ee9-0856-4ea8-88ab-4c0862f667af | c54c3bea-46e8-4377-bfa0-3a03c7abbafa | 2012-04-09 00:00:00 | NULL                |
+--------------------------------------+--------------------------------------+---------------------+---------------------+

但是,当我激发以下查询时:

select min(from_date), max(to_date) from some_table where user_id='1e159ee9-0856-4ea8-88ab-4c0862f667af' and point_id ='c54c3bea-46e8-4377-bfa0-3a03c7abbafa' order by from_date;
+------------------------+----------------------+
| min(from_date)         | max(to_date) |
+------------------------+----------------------+
| 2007-07-31 00:00:00    | 2012-04-08 00:00:00  |
+------------------------+----------------------+

如您所见,我希望结果中的to_date为NULL。但Max函数不会发现我为空。那么我有什么替代方法使我返回空值呢?此外,to_date列可能不是NULL。在这种情况下,我需要非空的适当日期。谁能帮帮忙吗?

共有1个答案

叶裕
2023-03-14

SQL小提琴

MySQL 5.6架构设置:

CREATE TABLE some_table (
  user_id varchar(64),
  point_id varchar(64),
  from_date date,
  to_date date  
  );


  INSERT INTO some_table VALUES
  ('1e159ee9-0856-4ea8-88ab-4c0862f667af', 'c54c3bea-46e8-4377-bfa0-3a03c7abbafa', '2007-07-31 00:00:00', '2012-04-08 00:00:00'),
  ('1e159ee9-0856-4ea8-88ab-4c0862f667af', 'c54c3bea-46e8-4377-bfa0-3a03c7abbafa', '2012-04-09 00:00:00', NULL);

查询1:

select min(from_date),
 case when MAX(to_date IS NULL) = 0 THEN max(to_date) END AS  max_to_date
from some_table
where user_id='1e159ee9-0856-4ea8-88ab-4c0862f667af' 
  and point_id ='c54c3bea-46e8-4377-bfa0-3a03c7abbafa'

结果:

|         min(from_date) | max_to_date |
|------------------------|-------------|
| July, 31 2007 00:00:00 |      (null) |

一些解释:

1-(to_date为NULL)返回1或0

2-MAX(to_date IS NULL)如果存在则取空值

3-MAX(NULL)=NULL,如果不是这种情况,您应该在您的case/when中添加一个ELSE

 类似资料:
  • 本文向大家介绍使用Break时在SAP Web Intelligence的表中获取MIN和MAX日期,包括了使用Break时在SAP Web Intelligence的表中获取MIN和MAX日期的使用技巧和注意事项,需要的朋友参考一下 这可以通过根据要查找的条件创建一个指标来实现-POST测试的最小绘制日期时间和PRE-Test的最大绘制日期时间。  创建该指标后,根据条件以黄色突出显示的行将显示

  • 本文向大家介绍Mysql获取当前日期的前几天日期的方法,包括了Mysql获取当前日期的前几天日期的方法的使用技巧和注意事项,需要的朋友参考一下 如:获得 2015-03-01 日的前7天的日期 : 输出: 2015-02-22

  • 问题内容: 我需要从MySQL表中获取与当前日期最接近的日期。 这是我的桌子: 因此,如果查询今天运行,它将返回 任何帮助深表感谢。谢谢 问题答案:

  • 本文向大家介绍从具有日期值的列中检索单个MySQL查询中的MIN和MAX日期,包括了从具有日期值的列中检索单个MySQL查询中的MIN和MAX日期的使用技巧和注意事项,需要的朋友参考一下 为此,您可以使用聚合函数和。让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是在单个查询中检索MIN和MAX日期的查询- 这将产生以下输

  • 问题内容: 在MySql数据库中有表 我的问题是,我要传递开始日期和结束日期,然后我将获得列日期,例如: 那么我将获得101,102,103 UserId的值。但是我出错了 问题答案: 这可能会更好: 也可能是保留字,对此不太确定。如果是这种情况,则您需要在其周围加反引号(前后应有一个`)

  • 问题内容: 是否可以在手动查询中使用诸如DATETIME之类的值或命令来插入当前日期和时间? 末尾引用的DATETIME值是我要添加当前日期和时间的位置。 问题答案: 您可以使用: