mysql - SQL 从 join 中获取最多相似的 id

标签 mysql sql-server

我对更高级的 SQL 查询相当陌生

给定下表和关联字段:

人员 ID、名字、姓氏

订单 订单 ID、人员 ID、订单日期时间

我想编写一个查询,通过 PersonId 连接两个表,并检索每个人及其最近的订单。

因此,如果下面的 James Doe (PersonId = 1) 在订单表中有很多订单,

订单 ID、人员 ID、订单日期时间

1          1          12/1/2013 9:01 AM

2          1          2/1/2011 5:01 AM

3          2          10/1/2010 1:10 AM

他只需要最新的。

PersonId 姓名名字姓氏订单 ID 订单日期时间

1 James Doe 1    12/1/2013 9:01 AM 

2 John Doe 3     10/1/2010 1:10 AM 

我一直在尝试这样的事情

SELECT p.PersonID, o.OrderID, MAX(o.OrderDateTime) From Person p
JOIN Orders o ON p.PersonID = o.PersonID
GROUP BY p.PersonID,

谢谢

最佳答案

此解决方案中的内部查询是一个临时表,其中包含每个人的最新订单。我将其连接回 Orders 表以获取所需的字段,然后再次连接到 Person 表。

SELECT p.PersonID, p.NameFirst, p.NameLast, o.OrderID, o.OrderDateTime
FROM Person p INNER JOIN Orders o
ON o.PersonId = p.PersonId
INNER JOIN
(
    SELECT o1.PersonId, MAX(o1.OrderDateTime) AS maxTime
    FROM Orders o1
    GROUP BY o1.PersonId
) t
ON o.PersonId = t.PersonId AND o.OrderDateTime = t.maxTime

关于mysql - SQL 从 join 中获取最多相似的 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31544035/

相关文章:

mysql - 优化表以提高性能

php - 如何在 Propel 中启用 LOAD DATA LOCAL INFILE?

SQL Server - 按行号分组 - 间隙和孤岛

sql-server - VBA只清除数据透视表缓存,但保留数据透视表结构

c# - LINQ 中字母数字数据的 SQL Order By 子句未按预期排序

php - "Training mode"使用 PDO 和 MySQL

PHP MySQL : Troubleshoot query

mysql - 使用 shell 脚本删除多个 mysql 数据库

mysql - SQL Server切换到MySQL/PostgreSQL启动?

c# - 错误 :System. IndexOutOfRangeException