使用SQL查找具有组中属性最大值的ID

时间:2017-07-27 13:49:34

标签: sql greatest-n-per-group

如果我们有一个简单的表(SQLite语法):

CREATE TABLE Receptions (
    ID INTEGER PRIMARY KEY AUTOINCREMENT,
    ID_Patients INTEGER NOT NULL, 
    ID_Doctors INTEGER NOT NULL,
    StartDateTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP);

填写了一些ID,为每位患者提供最新日期的最佳SQL查询是什么?是否有可能以某种方式优化以下示例以使其更快地工作?

SELECT ID_Patients pid, ID_Doctors did FROM Receptions INNER JOIN 
    (SELECT MAX(StartDateTime) maxDate, ID_Patients pid FROM Receptions GROUP BY pid) a 
    ON a.pid = pid AND a.maxDate = StartDateTime;

我想知道是否有人可以解释如何执行此查询以及在服务器端创建哪些数据结构(假设存在所有必需的索引)。

1 个答案:

答案 0 :(得分:1)

使用相关子查询可能会更快:

SELECT r.*
FROM Receptions r
WHERE r.StartDateTime = (SELECT MAX(r2.StartDateTime)
                         FROM FROM Receptions r2
                         WHERE r2.pid = r.pid 
                        );

为了提高性能,您需要Receptions(pid, StartDateTime)上的索引。