2017-07-27 11 views
1

我々は(SQLiteの構文)単純なテーブルを持っている場合は、次のいくつかのIDで満たさ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); 

、医師を取得するための最良の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)にインデックスをしたいです。

関連する問題