【发布时间】:2012-06-17 18:42:07
【问题描述】:
我有一张桌子,上面有各种仪表的读数
+-----------+---------+---------+---------+---------------------+
| 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,因为我担心随着表变得越来越大,请求会花费越来越长的时间。 有没有其他方法可以检索以前的读数?或者有什么方法可以让这个查询更有效率?
或者,理想情况下,在同一个查询中同时拥有当前阅读和前一个阅读?
谢谢。
【问题讨论】:
-
你试过使用
LIMIT吗? -
我只尝试了没有排序和使用 group by 的内部查询,但它只给了我 5 月的结果,甚至没有 6 月,所以我看不出
LIMIT可能有什么帮助。 -
在外部查询上使用
LIMIT。你只想要前两个结果,对吧? -
我需要
IN子句中指定的任意数量的仪表的读数,但我的表格不是按示例中的 dateOfReading 排序的,而是按 idReading 列排序的。跨度>
标签: mysql sql group-by sql-order-by