我有一张 table ,可以保存各种仪表的读数
+-----------+---------+---------+---------+---------------------+
| 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 |
+-----------+---------+---------+---------+---------------------+
在我的应用程序中,我需要提供当前读数(可能存在也可能不存在)和之前的读数(可能是几个月前的读数)。所以我现在的阅读可能是在七月,但之前的阅读可能是在四月。
我使用以下查询来检索以前的阅读内容:
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,因为我担心随着表变得越来越大,请求将花费越来越长的时间。 还有其他方法可以检索以前的读数吗?或者有什么办法可以让这个查询更加高效吗?
或者,理想情况下,在同一个查询中同时包含当前阅读内容和上一个阅读内容?
谢谢。
最佳答案
我认为相关子查询可以实现您所追求的目标:
SELECT Reading.idMeter,
Reading.usage,
Reading.`Index`,
Reading.dateOfReading,
( SELECT mr.Usage
FROM MeterReadings AS mr
WHERE mr.idMeter = Reading.idMeter
AND mr.DateOfReading < Reading.DateofReading
ORDER BY DateOfReading DESC
LIMIT 1
) AS PreviousReadingUsage
FROM meterReadings AS Reading,
WHERE Reading.idMeter IN (189,190)
AND Reading.dateOfReading < '2012-07-31'
ORDER BY Reading.dateOfReading DESC
关于mysql - 从 mysql 表中检索倒数第二条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11073875/