Mysql запрос об использовании SUM и Limit для расчета использования и стоимости - PullRequest
0 голосов
/ 22 декабря 2010

У меня есть база данных mysql под названием sensor_data. Каждые 30 минут скрипт добавляет энергопотребление в эту базу данных, а также стоимость в зависимости от тарифа «день / ночь»

Rec   Date       Time              Reading   Usage  Cost    Tar
2771  2010-12-20 16:00:00 RFXPower 67044.6   0.5    0.09    0.18

То, что я ищу, - это запрос mysql, который будет возвращать энергопотребление за последний час и его стоимость. Другой запрос вернет ежедневное использование и стоимость. Для последнего запроса следует просто суммировать стоимость двух последних значений в столбце затрат. Я пытаюсь сделать это с помощью суммы и лимита, но не могу найти, как ограничить последние 2 текущих записи.

Ответы [ 3 ]

0 голосов
/ 23 декабря 2010

Поскольку запрос SUM возвращает только одну агрегированную строку, вы не можете напрямую комбинировать ее с LIMIT.Вы можете использовать подзапрос:

SELECT SUM(cost) + SUM(tar) FROM (SELECT cost, tar FROM sensor_data ORDER BY rec DESC LIMIT 2) AS subquery;

Или вместо этого вы можете использовать условие даты или времени (WHERE …).

0 голосов
/ 23 декабря 2010

Если я не ошибаюсь, у вас проблемы только с третьим запросом;первые два запроса работают хорошо.Для третьего запроса (суммируя затраты на последние две записи) можно отсортировать набор результатов в порядке убывания и ограничить его двумя записями.

0 голосов
/ 23 декабря 2010

чтобы получить последний час:

SELECT SUM(Cost)
FROM sensor_data
WHERE RecID > (SELECT Rec FROM sensor_data WHERE Date < CURDATE() OR Time < NOW() - INTERVAL 1 HOUR ORDER BY Rec DESC LIMIT 1);

и получить дневную сумму:

SELECT SUM(Cost)
FROM sensor_data
WHERE RecID > (SELECT Rec FROM sensor_data WHERE Date < CURDATE() ORDER BY Rec DESC LIMIT 1);
...