【问题标题】:Selecting Max Date Per Day For Selected ID为所选 ID 选择每天的最大日期
【发布时间】:2018-10-22 18:19:27
【问题描述】:

我目前有一个表格,其中包含针对任何给定 ID 每天包含多个条目的结构化数据。

我需要选择每天的最大日期,以免选择数百条记录。

我现在正在使用这个查询,但它只返回数据库中每个 id 的一个最大日期周期。

 SELECT a.*
 FROM turtle_locations a
 INNER JOIN
    (SELECT turtle_id, MAX(date) AS maxdate
    FROM turtle_locations
    GROUP BY turtle_id) groupedtt 
 ON a.turtle_id = groupedtt.turtle_id 
 AND a.date = groupedtt.maxdate

我想要的是,如果某个特定的海龟在一天内说 10 个条目,则只返回当天的最新条目。

表结构很简单: turtle_id,日期,纬度,经度

随着时间的推移,每只海龟都有多个记录,每天有多个条目。例如查看下面其中一只海龟的数据

https://pastebin.com/jpQB2VKW

【问题讨论】:

  • 请检查发布的答案并提供反馈。
  • 这是一个常见问题解答。请始终在谷歌上搜索您的问题/问题/目标的许多清晰、简洁和特定的版本/措辞,带和不带您的特定字符串/名称,并阅读许多答案。将您发现的相关关键字添加到搜索中。如果您没有找到答案,请发布,使用 1 个变体搜索作为标签的标题和关键字。请参阅向下投票箭头鼠标悬停文本。如果您确实有要发布的非重复代码问题,请阅读并通过minimal reproducible example 采取行动。
  • 嗨。请use text, not images/links, for text (including code, tables & ERDs)。使用链接/图像仅是为了方便补充文本和/或无法在文本中给出的内容。永远不要给出没有图例/键的图表。如果您有代表,请使用编辑功能内联,而不是链接 - 使您的帖子独立。

标签: mysql join


【解决方案1】:
  • 在您的子选择查询 (Derived Table) 中,您还需要使用 Date() 函数按日期分组。这将为您提供每天和 id 的最大日期值。

尝试以下方法:

 SELECT a.*
 FROM turtle_locations AS a
 INNER JOIN
    (SELECT turtle_id, 
            DATE(`date`) AS day_date, 
            MAX(`date`) AS maxdate
    FROM turtle_locations 
    GROUP BY turtle_id, day_date) AS groupedtt 
 ON a.turtle_id = groupedtt.turtle_id 
 AND a.`date` = groupedtt.maxdate 

DB Fiddle Demo

【讨论】:

    【解决方案2】:

    http://sqlfiddle.com/#!9/861ab1/1

     SELECT a.*
     FROM turtle_locations a
     LEFT JOIN turtle_locations b
        ON a.turtle_id = b.turtle_id
        AND a.date < b.date
     WHERE b.turtle_id IS NULL
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多