2016-04-28 5 views
0

У меня есть таблица, как (ID, disk_id, disk_usage, time_measured)Суммируя уменьшается в SQL

Каждая строка, соответствующая использования диска в определенный момент времени. На диске будет много строк. id - это только столбец первичного ключа.

Я хочу подытожить интервалы, где есть уменьшение между строками для дат между 01.01.2012 и 1/1/2016.

I.e. если disk_usage для конкретного был 10 ГБ на 1/1/2016 и 5 ГБ на 1/2/2016, я хочу включить 5 ГБ в мою сумму. Если использование увеличивает между двумя точками времени, я хочу игнорировать этот интервал.

+3

Редактировать свой вопрос и предоставить образцы данных и желаемые результаты. –

ответ

1

Хорошо ... это хорошая задача для оконных функций. Это недоступно для mysql. Что ты можешь сделать? Для каждой строки вы можете запросить предыдущую запись - самую новую, но более старую, чем ту, которую вы запрашиваете. Для этого вам нужно самостоятельно присоединиться к таблице. Определим предыдущую дату:

select max(b.time_measured) 
from the_table as a 
join the_table as b 
    on a.disk_id = b.disk_id and a.time_measured > b.time_measured 
group by a.disk_id 

Теперь у вас есть эта дата. Я понятия не имею, если ваш MySQL понимает подзапросов - если так что вы можете сделать это, что:

select a.*, b.* 
from the_table as a 
join the_table as b 
    on a.disk_id = b.disk_id 
where b.time_measured = (
select max(b.time_measured) 
from the_table as a 
    join the_table as b 
    on a.disk_id = b.disk_id and a.time_measured > b.time_measured 
group by a.disk_id) 
group by a.disk_id 

Другой вариант, чтобы сделать это в вашей программе.

+0

Как это суммирует сокращения? Похоже, он находит пары строк, где одна строка сразу предшествует другой (половина битвы?) – OneSolitaryNoob

+0

У вас есть две строки в руке - так что вы можете сравнивать, фильтровать ... Для меня - вот и ответ. –

Смежные вопросы