У меня есть таблица, которая содержит показания различных счетчиковПолучение второй последней записи из таблицы тузд
+-----------+---------+---------+---------+---------------------+
| 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, как я боюсь, как таблица становится все больше и больше запрос займет больше времени и дольше. Есть ли другой способ получить предыдущее чтение? Или есть способ сделать этот запрос более эффективным?
Или, в идеале, есть как настоящее чтение, так и предыдущее в том же запросе?
спасибо.
вы пытались с помощью [ 'LIMIT'] (Http: //dev.mysql. ком/док/RefMan/5,1/о/select.html)? – Jason
Я попробовал только внутренний запрос без заказа и использования группы, но это дало мне результат только с мая, даже не июня, поэтому я не вижу, как может помочь LIMIT. – eXtenZy
используйте 'LIMIT' для внешнего запроса. Вам просто нужны первые два результата, верно? – Jason