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

在mysql查询中获取两个日期列之间的最高日期

谢鸿飞
2023-03-14

你好,我有两列日期时间的多行,我想获取所有记录的两列之间的最新日期(最高)的行。请查看以下内容:

 ID|Date1                 |Date2
 1 |2021-06-10 19:03:36   |Null
 2 |2021-06-11 19:33:41   |2021-06-16 09:49:41
 3 |2021-06-16 20:04:24   |Null

我想从两列(Date1和Date2)的所有记录中获取最高日期。从上表中,我想要第三行日期,因为这是两列所有记录中的最高日期(2021-06-16 20:04:24)。如果我们在2021-06-16 09:20:41之前更改date1列第3行,那么结果将是第2行,因为在date2中找到了最高日期记录。请帮助我创建mysql查询以获取完整的数据行

共有3个答案

杜浩壤
2023-03-14

有一种方法可以用最少的SQL“你的桌子”是不管你的桌子叫什么名字:

select ID, Date1, Date2
from yourtable
where greatest(
  coalesce(Date1,'1900-01-01'), 
  coalesce(Date2,'1900-01-01')
) in (
  select max(greatest(
    coalesce(Date1,'1900-01-01'), 
    coalesce(Date2,'1900-01-01')
  )) from yourtable
)

然而,对于大型表,这种查询的性能可能无法扩展。编辑:更新为将空日期的coalesce()包含到任意“早”日期。

满子实
2023-03-14

您可以合并这两列并获得MAX()

SELECT MAX(dateColumns)
FROM
    (
     SELECT DATE1 as dateColumns FROM yourtable
     UNION ALL
     SELECT DATE2 FROM yourtable
    ) sub
印嘉泽
2023-03-14

如果您只想要结果中的一行,而不关心关系,则使用magest()获取每行的最大日期,按该最大日期降序排序,并使用LIMIT 1选择最上面的一行:

SELECT *
FROM tablename
ORDER BY GREATEST(COALESCE(Date1, '1000-01-01'), COALESCE(Date2, '1000-01-01')) DESC 
LIMIT 1

如果Date1不能为空,则仅对Date2使用COALESCE()

SELECT *
FROM tablename
ORDER BY GREATEST(Date1, COALESCE(Date2, '1000-01-01')) DESC 
LIMIT 1

请看演示

 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 获取两个日期之间的日期列表 (20个答案) 7年前关闭。 我想通过选择查询将日期列表放在两个日期之间。例如: 如果我给出“ 2012-02-10”和“ 2012-02-15”,则需要结果。 我怎样才能得到? 问题答案: 尝试: -日期范围可长达近300年。 [根据UrvishAtSynapse的建议编辑进行更正。]

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

  • 问题内容: 我想查询一个mySQL表以提取两次和两次之间的数据。我知道如何使用“ between”调用对单个“ datetime”列执行此操作,但是我的列是一个“ date”列和一个“ time”列。我在网上可以找到的所有解决方案都是针对单个datetime列的。 我的范围从15:30的“ day1”到15:14的day1 + 1day 到目前为止,我可以获得以下范围(有效): 但是我显然需要合并

  • 问题内容: 使用标准的mysql函数可以编写查询,该查询将返回两个日期之间的天数列表。 例如,给定2009-01-01和2009-01-13,它将返回一个具有以下值的列表: 编辑:看来我还不清楚。我要生成此列表。我在数据库中存储了值(按日期时间),但希望将它们在左外部联接中汇总到上述日期列表中(我希望这种联接的某些右侧在几天内会为null并将对此进行处理) )。 问题答案: 我将使用此存储过程将所

  • 问题内容: 我有两个这样的表: 表格1 表2 我想从 Table1中 选择并插入 Table2中 。 例如: 在表1中,我有这个 在表2中,我想要这个 带有样本数据的表结构 问题答案: 感谢您的架构。它使处理您的问题变得容易。我对您的架构进行了一些更改以利用auto_increment 在这里,我在emp_leave_daywise表上添加了唯一约束,因为id整数上的主键不能确保记录不重复。 em

  • 问题内容: 这个问题已经在这里有了答案 : 获取两个日期之间的日期列表 (19个答案) 7年前关闭。 我想通过选择查询将日期列表放在两个日期之间。例如: 如果我给出“ 2012-02-10”和“ 2012-02-15”,则需要结果。 我怎样才能得到? 问题答案: 尝试: -未来的日期范围将近300年。 [根据UrvishAtSynapse的建议编辑进行更正。]