Вопрос:
Как я могу рассчитать только первые значения для каждой продолжительности (небольшого интервала) в интервале?
Подробности:
У меня есть (много) счетчиков (столбец counterId). время от времени производится выборка каждого счетчика, и эта выборка сохраняется в таблице counter_samples:
таблица counter_samples:
id |counterId | value | Time |
1 | 1 | 100 | 2015-06-12 14:00:04 |
2 | 2 | 57 | 2015-06-12 14:00:11 |
3 | 1 | 100 | 2015-06-12 15:00:43 |
4 | 2 | 59 | 2015-06-12 15:00:24 |
5 | 1 | 104 | 2015-06-12 16:00:12 |
6 | 2 | 63 | 2015-06-12 16:00:14 |
7 | 1 | 110 | 2015-06-12 17:00:25 |
8 | 2 | 70 | 2015-06-12 17:00:28 |
9 | 1 | 120 | 2015-06-12 18:00:17 |
10 | 2 | 80 | 2015-06-12 18:00:36 |
11 | 1 | 130 | 2015-06-12 19:00:04 |
12 | 2 | 90 | 2015-06-12 19:00:13 |
13 | 1 | 170 | 2015-06-12 20:00:52 |
14 | 2 | 95 | 2015-06-12 20:00:13 |
15 | 1 | 190 | 2015-06-12 21:00:11 |
16 | 2 | 99 | 2015-06-12 21:00:04 |
Как видите, по прошествии времени каждое значение счетчика всегда больше или равно предыдущему значению (равно = нет подсчета в промежутке времени)
Я хочу для любого заданного интервала (@start_date И @end_date) запросить таблицу образцов о продолжительности (час / день / неделя / месяц и т. Д.) И получить общий подсчет для каждой продолжительности в интервале.
Например, если интервал: 01.01.2014 - 01.01.2015, а продолжительность - месяц, набор результатов будет состоять из 12 строк, которые представляют 12 месяцев в интервале, а значение месяца для месяца 'i' будет < strong> month [i + 1] .value - месяц [i] .value.
Чтобы вычислить подсчет, я хочу вычесть первую запись следующей продолжительности из первой записи текущей продолжительности - в приведенном выше примере, если продолжительность составляет 2 часа, то я хочу получить (для counterId = 1):
|CounterId | count | Time |
| 1 | 4 | 2015-06-12 14:00:00 |
| 1 | 16 | 2015-06-12 16:00:00 |
| 1 | 50 | 2015-06-12 18:00:00 |
И для counterId = 2:
|CounterId | count | Time |
| 2 | 6 | 2015-06-12 14:00:00 |
| 2 | 17 | 2015-06-12 16:00:00 |
| 2 | 15 | 2015-06-12 18:00:00 |
(обратите внимание, что в двух запросах выше время 20:00:00 игнорируется, поскольку для 22:00:00 и выше нет записи)
Время необходимо изменить, чтобы оно соответствовало формату (intervalStart + duration * k), потому что я хочу иметь возможность группировать по времени и суммировать счетчики по времени в другом запросе, чтобы в приведенном выше примере получить:
| count | Time |
| 10 | 2015-06-12 14:00:00 |
| 33 | 2015-06-12 16:00:00 |
| 65 | 2015-06-12 18:00:00 |
Я искал здесь и там хороший пример для этой проблемы, но не решил ее с помощью того, что нашел: Sql для выбора строки каждого дня месяца
Выбрать первую строку в каждой группе GROUP BY?
Когда следует использовать перекрестное применение через внутреннее объединение?
Спасибо!