|
|
|
Вычитание значений в последовательных записях
|
|||
|---|---|---|---|
|
#18+
День добрый! Есть множество записей вида Время-Значение, хранящие соответственно значение некоего показателя в конкретный момент времени. Необходимо к каждой записи вычислить время, прошедшее до следующего измерения. То есть получить что-то вроде Значение | Время | t[n+1]-t[n] 22 | ... 12:42:14 | 133 48 | ... 12:44:27 | 130 57 | ... 12:45:57 | 60 14 | ... 12:46:57 | ... Только как к такому вычислению подойти не могу подступиться. Своих скромных навыков хватает чтобы вычислять это для одной записи, но учитывая их количество вариант крайне не рационален. А чтобы загуглить не могу даже сообразить как правильно обозвать то, что мне нужно. Подскажите как это можно реализовать, если вообще можно, или хотя бы под каким именем подобное действие искать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2016, 12:46 |
|
||
|
Вычитание значений в последовательных записях
|
|||
|---|---|---|---|
|
#18+
restangel, показывай свой вариант. а вообще - подзапрос с order by ... limit 1. при наличии соответствующего индекса будет вполне себе резво выполняться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2016, 12:53 |
|
||
|
Вычитание значений в последовательных записях
|
|||
|---|---|---|---|
|
#18+
У значения же, наверное, еще идентификатор какой-то должен быть? select Date1, Date2, (UNIX_TIMESTAMP(Date1) - UNIX_TIMESTAMP(Date2)) from (select Время from Таблица where ЗначениеID = 1 order by Время desc limit 1) as Date1, (select Время from Таблица where ЗначениеID = 1 order by Время desc limit 1, 1) as Date2 Примерно так... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2016, 12:59 |
|
||
|
Вычитание значений в последовательных записях
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эхпоказывай свой вариант. Код: sql 1. 2. 3. 4. 5. 6. Но это лютейшая жесть, не говоря уже о том что вычислять это значение для всех пары миллионов записей придется отдельными запросами, а один выполняется пару секунд с индексами по всему, кроме Значения. По хорошему надо добавлять это значение когда оно в логи улетает, что и будет сделано, но старые записи тоже надо преобразовать. Int_20hУ значения же, наверное, еще идентификатор какой-то должен быть? select Date1, Date2, (UNIX_TIMESTAMP(Date1) - UNIX_TIMESTAMP(Date2)) from (select Время from Таблица where ЗначениеID = 1 order by Время desc limit 1) as Date1, (select Время from Таблица where ЗначениеID = 1 order by Время desc limit 1, 1) as Date2 Примерно так... Ключа непосредственного нет, неявный ключ состоит из idУстройства, idГруппы и Времени. Или я не так понял? Ваш вариант как-то поприятнее смотрится, но все равно работает только для одной строки, хоть и значительно быстрее... Сделать бы его одним запросом, а то посылать 3кк запросов на сервер как-то не есть хорошо, мне кажется...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 10:47 |
|
||
|
Вычитание значений в последовательных записях
|
|||
|---|---|---|---|
|
#18+
restangel, типа Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 11:39 |
|
||
|
Вычитание значений в последовательных записях
|
|||
|---|---|---|---|
|
#18+
tanglir, Долго пытался понять как работает этот запрос, пытался приспособить его для своей базы - не срослось... Можно мелкие пояснения добавить?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2016, 15:25 |
|
||
|
Вычитание значений в последовательных записях
|
|||
|---|---|---|---|
|
#18+
restangel, почитайте FAQ: Нумерация строк и другие вопросы про использование переменных . Там, правда, нумерация, а не расчёт разницы, но суть та же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2016, 05:29 |
|
||
|
Вычитание значений в последовательных записях
|
|||
|---|---|---|---|
|
#18+
tanglir, О_о Я думаю это как раз то, что нужно, спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2016, 09:54 |
|
||
|
Вычитание значений в последовательных записях
|
|||
|---|---|---|---|
|
#18+
tanglir, А все таки нет... Ваши переменные натолкнули на меня на куда более простое и эффективное решение)) Код: sql 1. 2. 3. то бишь сортируем по убыванию времени и храним в time1 время из предыдущей строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2016, 12:25 |
|
||
|
Вычитание значений в последовательных записях
|
|||
|---|---|---|---|
|
#18+
restangelто бишь сортируем по убыванию времени и храним в time1 время из предыдущей строки.а потом переходим с одного датчика на другой, и превед Нет, если это должно работать только для одного устройства, то всё нормально. Но мне казалось, что надо выбирать сразу всю группу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2016, 05:30 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=101&tid=1831780]: |
0ms |
get settings: |
11ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
74ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
| others: | 236ms |
| total: | 407ms |

| 0 / 0 |
