首页 > 解决方案 > MySQL 从 DATETIME 中选择整个最旧的一天

问题描述

请帮助我:-) 这对我来说绝对是新的,我不知道该怎么做。

我有具有这种结构和这些值的 MySQL 表:

material_id (INT) material_referenceid (INT) material_cas(日期时间)
2 13 2021-11-01T17:19:08Z
10 13 2021-11-08T17:19:28Z
23 24 2021-11-04T17:41:48Z
25 4 2021-11-02T17:40:51Z
27 13 2021-11-01T17:19:19Z
30 24 2021-10-11T17:41:31Z
33 24 2021-10-11T17:41:41Z

我需要在表中显示 material_referenceid =(例如)13 和 date = WHOLE OLDEST DAY 值的所有行。所以从这个表中我想得到material_id = 2、27的行。当这两个被删除时,将选择10。

非常感谢所有会帮助我的人。非常感谢您的帮助!

标签: mysqldatedatetime

解决方案


您只需要选择最旧的一天(在子查询中)并将其连接回表。

要选择最早的一天:

select date(min(material_cas)) from material where material_referenceid = 13

所以,使用它:

select m.material_id, m.material_cas
from (
   select date(min(material_cas)) oldest_date from material where material_referenceid = 13
) oldest
join material m on m.material_reference_id=13 and date(m.material_cas)=oldest_date

假设 material_cas 存储在 UTC 中,要根据欧洲/布拉格日期查看,请改为:

select m.material_id, m.material_cas
from (
   select date(convert_tz(min(material_cas),'+00:00','Europe/Prague')) oldest_date from material where material_referenceid = 13
) oldest
join material m on m.material_reference_id=13 and date(convert_tz(m.material_cas,'+00:00','Europe/Prague'))=oldest_date

推荐阅读