从mysql表中检索最后一条记录
我有一张桌子,上面有各种仪表的读数从mysql表中检索最后一条记录,mysql,sql,group-by,sql-order-by,Mysql,Sql,Group By,Sql Order By,我有一张桌子,上面有各种仪表的读数 +-----------+---------+---------+---------+---------------------+ | idReading | idMeter | index | usage | dateOfReading | +-----------+---------+---------+---------+---------------------+ | 671 | 189 | 884.000 |
+-----------+---------+---------+---------+---------------------+
| 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,因为我担心随着表越来越大,请求将花费越来越长的时间。
是否有其他方法检索以前的读数?或者有没有办法让这个查询更有效
或者,理想情况下,当前读数和前一读数都在同一个查询中
谢谢。我昨天刚刚发现了“分析函数”,我很确定它们涵盖了这类需求。给它一个谷歌,在Youtube上也有一些教程 试试这个:
SELECT
Reading.idMeter,
Reading.usage,
Reading.`Index`,
(Select dateOfReading from meterReading order by dateOfReading desc limit 1,1)
FROM meterReadings AS Reading
GROUP BY Reading.idMeter;
我认为相关子查询将实现您所追求的目标:
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
你试过使用吗?我只试过内部查询,没有排序,也没有使用group by,但它只给了我5月份的结果,甚至6月份的结果,所以我看不出LIMIT有什么帮助。在外部查询上使用LIMIT。您只需要前两个结果,对吗?我需要任意数量的米的读数,如in子句中所述,但我的表格不是按读取日期排序的,如示例中所示,它是按idReading列排序的。事实上,这里有一个示例:这更像是一个注释而不是答案。此外,这些在MySQL中还不可用。使用[我最近的答案]stackoverflow.com/questions/10980957/10983910中使用的递增变量是我所知道的唯一一种模拟其他DBMS的行数函数的方法。是的,我尝试过注释,但除非有答案,否则我似乎没有该选项。你知道为什么吗?这是对新会员的限制吗?我昨天刚加入。是的。我想它需要50的声誉,这让我只能从一米的读数。我需要in条款中所有仪表的读数。是的,对于in条款中指定的每个仪表。是的,这正是我需要的。