2017-07-27 57 views
1

如果我們有一個簡單的表(SQLite的語法):找到一組與SQL屬性的最大值的ID

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); 

充斥着一些IDS,究竟是什麼讓醫生最好的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; 

我不知道是否有人可以解釋如何執行此查詢以及在服務器端創建什麼數據結構(假設有所有必需的索引)。

+2

您正在使用哪些DBMS? –

+1

您擁有該信息的任何DBMS。 – Koban

回答

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)的索引。

相關問題