内部結合と制限を使用した最新のステータス データ
この課題には、Service と Status の 2 つのテーブルから各サービスの最新のステータスを取得することが含まれます。 Service テーブルにはサービス情報が含まれますが、Status テーブルにはタイムスタンプ付きのレコードでステータス更新が保持されます。
これを実現するには、内部結合を使用して、service_id 列に基づいてテーブルを結合します。ただし、各サービスの最新ステータスを選択するときに課題が発生します。次のステートメントは、最後のサービスの最新ステータスのみを取得します。
SELECT ser.id, ser.name, a.status, a.timestamp from Service ser inner join (select * from status order by Status.timestamp DESC limit 1) as a on a.service_id = ser.id
各サービスの最新ステータスを取得するには、ネストされたクエリが必要です。
SELECT ser.id, ser.name, s.status, s.timestamp FROM Service ser INNER JOIN status as s ON s.service_id = ser.id INNER JOIN ( SELECT service_id, MAX(timestamp) AS MaxDate FROM status GROUP BY service_id ) AS a ON a.service_id = s.service_id AND a.MaxDate = s.timestamp;
ネストされたクエリは、各サービスの最大タイムスタンプ。これは、そのサービスの最新のステータスを表します。次に、結果がメイン クエリと結合されて、各サービスの最新のステータス データが表示されます。
このアプローチを使用すると、目的の出力が得られます。
id | name | status | timestamp |
---|---|---|---|
1 | Test1 | OK | October, 15 2015 09:08:07 |
2 | Test2 | OK | October, 15 2015 10:15:23 |
以上がSQL 結合を使用して各サービスの最新ステータスを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。