我有一个 MySQL 表,如下所示:
user_id resource_id last_used
--------------------------------
1 1 2010-09-01
1 2 2010-09-02
1 3 2010-09-04
2 3 2010-09-08
2 2 2010-09-03
3 1 2010-09-01
3 1 2010-09-05
我需要编写一个查询,告诉我哪个用户最后使用了哪个资源,每个用户和每个资源最多只列出一次(如果某些用户和某些资源未列出也没关系)。在上述情况下,我想要以下结果集:
user_id resource_id last_used
--------------------------------
2 3 2010-09-08
3 1 2010-09-05
请注意,每个用户 ID 最多出现一次,每个资源 ID 最多出现一次,并且优先考虑最近的 last_used 日期。对于我的目的来说,用户 1
和资源 2
根本不出现(尽管如果 1 2 2010-09-02 也可以)
出现在结果中)。此查询需要在可能很大的数据库(500,000 多行)上运行。在 SQL 中是否有一个简单且相当快速的查询来执行此操作?
最佳答案
用途:
SELECT x.*
FROM YOUR_TABLE x
JOIN (SELECT t.resource_id,
MAX(t.last_used) AS max_last
FROM YOUR_TABLE t
GROUP BY t.resource_id) y ON y.resource_id = x.resource_id
AND y.max_last = x.last_used
关于sql - 如何编写 SQL 查询来确保两列独立唯一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3805469/