在两个联接表中选择与最大值对应的列

斯瓦加塔

我有两个表,分别是“用户”和“采访”。一个用户可以有多个采访记录。

Users
-----
UserID
FirstName
LastName

Interviews
----------
InterviewID
UserID
DateOfInterview

我只想获取最新的采访记录。这是我的查询

select u.UserID, firstname, lastname, max(DateOfInterview) as latestDOI 
from users u 
left join interviews i 
on u.UserID = i.UserID 
GROUP BY u.UserID, firstname, lastname
ORDER BY max(DateOfInterview) DESC

如何更新查询以也返回InterviewID(即对应于max(DateOfInterview)的查询)?

约翰·布林格

您可以在WHERE子句中使用聚合子查询,而不是在选择列表中使用聚合函数

select u.UserID, firstname, lastname, i.InterviewId, DateOfInterview as latestDOI 
from users u 
left join interviews i 
  on u.UserID = i.UserID 
where i.UserId is null or i.DateOfInterview = (
  select max(DateOfInterview)
  from interviews i2
  where i2.UserId = u.UserId
)

那确实假设max(DateOfInterview)每个用户都是唯一的,但是这个问题没有明确的答案。请注意,主查询不再是聚合查询,因此此类查询的约束不适用。

还有其他方法可以解决该问题,值得研究一下,因为诸如此类的相关子查询可能会影响性能。例如,您可以使用内联视图生成每个用户的最新采访日期的表,并使用该视图的联接将用户与其最新采访的ID连接起来:

select u.*, im.latestDOI, i2.InterviewId
from
  users u
  left join (
      select UserID, max(DateOfInterview) as latestDOI 
      from interviews i
      group by UserID
    ) im
    on u.UserId = im.UserId
  left join interviews i2
    on im.UserId = i2.UserId and im.latestDOI = i2.DateOfInterview

也有其他选择,一些标准和其他特定于DB的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从两个表中选择但仅针对其中一列中的最大值

来自分类Dev

从两个表中选择一行的最大值

来自分类Dev

从表中选择列与联接两个表

来自分类Dev

LINQ查询以联接两个表并从表B中选择与表A相对应的最新记录

来自分类Dev

如何获得两个联接变量的最大值

来自分类Dev

如何在两列中选择最大值的记录?

来自分类Dev

反向外键联接-从两个表中选择

来自分类Dev

在两个值之间选择最大值PostgreSQL

来自分类Dev

SQL从同一表中选择两个最大行,并与第三个表联接

来自分类Dev

MySQL:根据两个不同的ENUM值从不同的行中选择最小值和最大值

来自分类Dev

如何从共享两个公共列的一组行中选择一列中具有最大值的熊猫行?

来自分类Dev

在不同的列中选择对应于最大值/最小值的元素

来自分类Dev

将两个不同表中的两列相乘后找到最大值-SQL

来自分类Dev

比较两个 MySQL 表之间的最大值

来自分类Dev

如何从多个联接表MySQL中选择不同的最大值

来自分类Dev

从列SQL中选择最大值

来自分类Dev

内部联接两个表,并为第二个表的第一个表中的每个条目返回最大值

来自分类Dev

选择两个日期之间 KDB 表中的所有行,但只取特定列中具有最大值的行

来自分类Dev

为其他两列中的每个值从列中选择最大值

来自分类Dev

从每组涉及两个字段的方程中选择最大值

来自分类Dev

从两个表的同一列中选择唯一值

来自分类Dev

mysql-从两个表中选择多个列值

来自分类Dev

SQL Server中选择一行的最大值和最大值的列名作为两列

来自分类Dev

使用greendao从两个表中选择多个列

来自分类Dev

SQL从两个不同的表中选择相同的列

来自分类Dev

如何从两个表SQL Server中选择列

来自分类Dev

从两个表中选择并设置空列

来自分类Dev

从具有相同列的两个表中选择

来自分类Dev

如何使用linq从两个表中选择列

Related 相关文章

  1. 1

    从两个表中选择但仅针对其中一列中的最大值

  2. 2

    从两个表中选择一行的最大值

  3. 3

    从表中选择列与联接两个表

  4. 4

    LINQ查询以联接两个表并从表B中选择与表A相对应的最新记录

  5. 5

    如何获得两个联接变量的最大值

  6. 6

    如何在两列中选择最大值的记录?

  7. 7

    反向外键联接-从两个表中选择

  8. 8

    在两个值之间选择最大值PostgreSQL

  9. 9

    SQL从同一表中选择两个最大行,并与第三个表联接

  10. 10

    MySQL:根据两个不同的ENUM值从不同的行中选择最小值和最大值

  11. 11

    如何从共享两个公共列的一组行中选择一列中具有最大值的熊猫行?

  12. 12

    在不同的列中选择对应于最大值/最小值的元素

  13. 13

    将两个不同表中的两列相乘后找到最大值-SQL

  14. 14

    比较两个 MySQL 表之间的最大值

  15. 15

    如何从多个联接表MySQL中选择不同的最大值

  16. 16

    从列SQL中选择最大值

  17. 17

    内部联接两个表,并为第二个表的第一个表中的每个条目返回最大值

  18. 18

    选择两个日期之间 KDB 表中的所有行,但只取特定列中具有最大值的行

  19. 19

    为其他两列中的每个值从列中选择最大值

  20. 20

    从每组涉及两个字段的方程中选择最大值

  21. 21

    从两个表的同一列中选择唯一值

  22. 22

    mysql-从两个表中选择多个列值

  23. 23

    SQL Server中选择一行的最大值和最大值的列名作为两列

  24. 24

    使用greendao从两个表中选择多个列

  25. 25

    SQL从两个不同的表中选择相同的列

  26. 26

    如何从两个表SQL Server中选择列

  27. 27

    从两个表中选择并设置空列

  28. 28

    从具有相同列的两个表中选择

  29. 29

    如何使用linq从两个表中选择列

热门标签

归档