mysql - 从 mysql 表中检索倒数第二条记录

标签 mysql sql group-by sql-order-by

我有一张 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/

相关文章:

mysql - 格式化 SQL 表删除 0 并根据年份对它们进行分组

sql - 在 SQL 中使用带有参数/变量的 Case 语句来检查 Null 值

PHP SQL 没有带字符串的结果

mysql - 多对多mySQL选择

sql - 并排显示联合数据而不重复

MySQL - 表是否具有特定的列名

mysql - 事务暂停在 MySQL 中如何工作?

php - 如何通过php向多个mysql数据库插入数据?

mysql - GROUP BY with MIN 和 MAX - 落在解决方案的日期范围内

python - pandas 中单列的多个值集的差异