【发布时间】:2011-06-08 22:32:06
【问题描述】:
表:uuid、版本、日期时间
版本不是唯一的,但其想法是仅获取给定 uuid 具有最新日期时间的行
SELECT * FROM table WHERE uuid='bla' GROUP BY version ORDER BY datetime desc
...当然会得到 datetime asc 结果——有没有办法将 group by “preorder”到 desc,以便只获取最新版本?
【问题讨论】:
表:uuid、版本、日期时间
版本不是唯一的,但其想法是仅获取给定 uuid 具有最新日期时间的行
SELECT * FROM table WHERE uuid='bla' GROUP BY version ORDER BY datetime desc
...当然会得到 datetime asc 结果——有没有办法将 group by “preorder”到 desc,以便只获取最新版本?
【问题讨论】:
我有一个更好的方法,你可以添加一个desc 来分组:
SELECT * FROM table WHERE uuid='bla' GROUP BY version desc
为什么会这样是因为我的 id 是生成的,所以最新的 id 总是意味着最新的日期时间
【讨论】:
datetime 时才有效(已排序)
SELECT * FROM
(SELECT * FROM table WHERE uuid='bla' ORDER BY datetime desc) table
GROUP BY version;
【讨论】:
由于该表只有这 3 个字段,并且您通过 uid 进行过滤,因此您可以只使用 MAX 而不使用 JOIN:
SELECT version, MAX(datetime) Maxdatetime
FROM table
WHERE uuid='bla'
GROUP BY version
但是,如果表格有更多字段,或者您没有按 uid 过滤 - 您需要先获取每个版本的 MAX 日期时间,然后选择该行:
SELECT t.uuid, t.version, t.datetime
FROM table t JOIN (
SELECT version, MAX(datetime) Maxdatetime
FROM table
WHERE uuid='bla'
GROUP BY version
) r ON t.version = r.version AND t.datetime = r.Maxdatetime
WHERE t.uuid='bla'
ORDER BY t.datetime desc
【讨论】: