选择最新的行

Posted

技术标签:

【中文标题】选择最新的行【英文标题】:Select latest rows 【发布时间】:2014-03-14 00:30:04 【问题描述】:

我在数据库中有一个表,我想通过某些条件从中。

我做了一个fiddle 来更好地解释我的需求。

如您所见,我已经尝试创建一个查询来获取我想要的数据。但不幸的是,我不仅得到了最新的行,而且实际上得到了符合条件的每一行,但日期。

我尝试用伪 sql 解释我想要什么:

SELECT * FROM test WHERE date = Max(date) AND user = 'Timmy';

编辑: 似乎我想要什么并不完全清楚。 “日期”描述配置文件的创建日期。所以我想获取“Timmy”的所有最新个人资料。

【问题讨论】:

【参考方案1】:

如果您想返回与它们关联的最近日期的行,您还可以使用子查询来获取结果:

select t1.description,
  t1.date,
  t1.profile,
  t1.user,
  Replace(t1.locations, ',', '|') locations
from test t1
inner join
(
  select max(date) date, profile, user
  from test
  group by profile, user
) t2
  on t1.user = t2.user
  and t1.date = t2.date
  and t1.profile = t2.profile
where t1.user = 'Timmy'
order by t1.profile

见SQL Fiddle with Demo。

子查询将返回每个用户和个人资料的最大日期,然后将它加入到您的用户、个人资料和日期表中,以返回每个用户的每个个人资料的最新行(或者,像这里一样,对于特定用户的每个个人资料)。

【讨论】:

'我想获得每一个'Timmy'的最新个人资料——我相信profile也应该包含在GROUP BY @AndriyM 是的,我认为你是正确的。更新了我的答案。谢谢【参考方案2】:
SELECT description,
       date,
       profile,
       user,
       Replace(locations, ',', '|') AS locations
FROM   test AS t
WHERE date = (
                  SELECT date
                  FROM test AS tm
                  WHERE tm.user = t.user
                  ORDER BY date DESC
                  LIMIT 1
                 )
  AND user = 'Timmy'
ORDER  BY profile ;     -- whatever

【讨论】:

这只是一个有点接近解决问题的答案。

以上是关于选择最新的行的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MySQL 中选择最新的行?

用于从表中选择具有最新时间戳的行的 JOOQ 代码

从每组中的 3 个表中选择 sql 中具有最新日期的行

如何为每个键值选择具有最新时间戳的行?

如何选择具有最新日期的行并根据该行计算另一个字段

选择最新的行,然后随机化这些行,然后显示随机化的前 2 行