sql - 如何编写 SQL 查询来确保两列独立唯一?

标签 sql mysql

我有一个 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/

相关文章:

sql - 0x5E5B7D7E的SQL意义是什么?

c++ - qt数据库fedora的mysql驱动

具有... > avg() 的 mysql 无法按预期工作

mysql - 统计多个表

MySQL 复制 : Using HAProxy and an HTTP-Check

sql - mysql查询优化——join和orderby

sql - 加速在两列上过滤并在函数上排序的 postgres 查询

按所有列进行 SQL 分组

sql - 如何从闭包表中以 HTML 显示树结构

php - cakephp 中带有动态选项的搜索过滤器