さまざまなメーターの測定値を保持するテーブルがあります
+-----------+---------+---------+---------+---------------------+
| idReading | idMeter | index | usage | dateOfReading |
+-----------+---------+---------+---------+---------------------+
| 671 | 189 | 884.000 | 441.000 | 2012-06-01 00:00:00 |
| 672 | 190 | 170.000 | 82.000 | 2012-06-01 00:00:00 |
| 584 | 190 | 88.000 | 88.000 | 2012-05-01 00:00:00 |
| 583 | 189 | 443.000 | 443.000 | 2012-05-01 00:00:00 |
+-----------+---------+---------+---------+---------------------+
私のアプリケーションでは、現在の読み値 (存在する場合と存在しない場合があります) と、数か月前の可能性のある以前の読み値の両方を利用できるようにする必要があります。したがって、現在のリーディングは 7 月かもしれませんが、前回のリーディングは 4 月になる可能性があります。
次のクエリを使用して、以前の読み取り値を取得しています。
SELECT * FROM (
SELECT Reading.idMeter, Reading.usage, Reading.`Index`, Reading.dateOfReading
FROM meterReadings AS Reading
WHERE Reading.idMeter IN (189,190)
AND Reading.dateOfReading < '2012-07-31'
ORDER BY Reading.dateOfReading DESC) AS OrderendReading
GROUP BY OrderendReading.idMeter
これはうまく機能しますが、別の SELECT 内で SELECT を使用していることに満足していません。テーブルが大きくなるにつれて、リクエストに時間がかかるようになるのではないかと心配しています。以前の読みを取得する他の方法はありますか? または、このクエリをより効率的にする方法はありますか?
または、理想的には、同じクエリで現在の読み取り値と前の読み取り値の両方を取得しますか?
ありがとうございました。