【问题标题】:MySQL SELECT whole oldest day from DATETIMEMySQL 从 DATETIME 中选择整个最旧的一天
【发布时间】:2021-11-09 18:59:03
【问题描述】:

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

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

material_id (INT) material_referenceid (INT) material_cas (DATETIME)
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。

在此先感谢所有帮助我的人。非常感谢您的帮助!

【问题讨论】:

  • UTC 中最早的一天?还是其他时区?
  • 请不要对您的表名保密;这让你更难回答你的问题
  • 对不起,我的错误。例如,表名是“材料”。时区是欧洲/布拉格。
  • 您在欧洲/布拉格的 material_cas 值是多少? Z 让我觉得你将它们存储为 UTC(你应该这样做!),但这就是你使用的任何客户端正在添加的东西
  • 另一个错误,我将使用 TIMESTAMP 而不是 DATETIME。

标签: mysql date datetime


【解决方案1】:

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

要选择最早的一天:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-04
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    相关资源
    最近更新 更多