Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Формула использующая текущее и предыдущее значение столбца для расчета (расчет ускорения) / 15 сообщений из 15, страница 1 из 1
14.12.2015, 12:47:48
    #39127178
michail_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формула использующая текущее и предыдущее значение столбца для расчета (расчет ускорения)
Добрый день,

в таблице есть 2 столбца:
время скорость
а0 1.2 0
а1 1.5 16
а2 1.9 35

Я хочу добавить третий столбец, в котором будут записаны данные ускорения. С добавлением проблем нет. Но не могу добавить в формулу текущее и предыдущее значение.

Ускорение для строки а0 = (скорость а0)/(время а0)
Ускорение для строки а1 = (скорость а1 - скорость а0)/(время а1 - время а0)
Ускорение для строки а2 = (скорость а2 - скорость а1)/(время а2 - время а1) и т.д.

В экселе это очень легко считается, а можно ли задать такую формулу в MySQL?
...
Рейтинг: 0 / 0
14.12.2015, 12:53:47
    #39127186
Формула использующая текущее и предыдущее значение столбца для расчета (расчет ускорения)
michail_s,

можно. варианты реализации:
коррелированный подзапрос в селект-листе
селф-джойн
...
Рейтинг: 0 / 0
14.12.2015, 13:11:01
    #39127214
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формула использующая текущее и предыдущее значение столбца для расчета (расчет ускорения)
ещё переменные, но это чисто мускльная специфика.
...
Рейтинг: 0 / 0
14.12.2015, 13:29:11
    #39127250
michail_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формула использующая текущее и предыдущее значение столбца для расчета (расчет ускорения)
Спасибо всем за ответы, пойду искать. Решение потом сюда напишу - может кому-то тоже пригодится.

Если кто-то сможет выложить пример кода (допустим по данным из примера), то было бы очень здорово.
...
Рейтинг: 0 / 0
14.12.2015, 13:49:22
    #39127281
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формула использующая текущее и предыдущее значение столбца для расчета (расчет ускорения)
...
Рейтинг: 0 / 0
14.12.2015, 16:52:34
    #39127549
michail_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формула использующая текущее и предыдущее значение столбца для расчета (расчет ускорения)
Пробовал-пробовал, но что-то по вышеприведенным ссылкам у меня не получилось построить запрос. Может кто подскажет как мне заполнить столбец Асс по формуле ускорения (она дана ниже):

Код: sql
1.
2.
3.
4.
5.
6.
7.
Time	    Speedknots	Speedkm	Acc
1449751931.976	1.500	0.772	(null)
1449751932.476	1.500	0.772	(null)
1449751932.976	1.800	0.926	(null)
1449751933.476	1.800	0.926	(null)
1449751933.976	1.900	0.977	(null)
1449751934.475	1.900	0.977	(null)



Формула для ускорения:
Acc = (b.Speedkm - a.Speedkm)/(b.Time - a.Time) , где Асс мы получаем и записываем для строки b

где строка b располагается сразу под строкой а.
...
Рейтинг: 0 / 0
15.12.2015, 06:47:06
    #39127986
Формула использующая текущее и предыдущее значение столбца для расчета (расчет ускорения)
michail_s,

вот тебе как пища для размышления, на твоем примере данных из стартового поста...
...
Рейтинг: 0 / 0
15.12.2015, 06:52:28
    #39127990
Формула использующая текущее и предыдущее значение столбца для расчета (расчет ускорения)
michail_s,

оу, у тебя же всего две колонки в исходной таблице...
тогда так
...
Рейтинг: 0 / 0
15.12.2015, 15:08:24
    #39128649
michail_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формула использующая текущее и предыдущее значение столбца для расчета (расчет ускорения)
Добрый Э - Эх,

Ссылки не открываются ( - обновите пожалуйста
На самом деле у меня 4 столбца, выше привел реальный пример из базы.
Но если работает на двух, то и для четырех, я думаю, смогу сделать
...
Рейтинг: 0 / 0
15.12.2015, 16:00:25
    #39128730
Формула использующая текущее и предыдущее значение столбца для расчета (расчет ускорения)
michail_s,

все открывается...
но на всякий случай скопирую сюда то, что по ссылке 2:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
-- тестовая таблица:
create table t (t real, v real);
insert into t values(1.2,  0);
insert into t values(1.5, 16);
insert into t values(1.9, 35);

-- запрос:
select t0.t as curr_t, t1.t as prev_t, t0.v as curr_v, t1.v as prev_v
     , (t0.v - coalesce(t1.v,0))/(t0.t - coalesce(t1.t,0)) as x_accel
  from t t0
  left join t t1
    on t0.t > t1.t
   and not exists
       (
         select null
           from t t2
          where t2.t < t0.t
            and t2.t > t1.t
       )
 order by t0.t;
...
Рейтинг: 0 / 0
15.12.2015, 16:52:47
    #39128838
michail_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формула использующая текущее и предыдущее значение столбца для расчета (расчет ускорения)
Добрый Э - Эх,

Спасибо за помощь, вторая ссылка открылась. Смысл запроса я понял, но у меня не получилось его адаптировать к моим данным . Где-то есть ошибка, т.к. запрос начинает исполняться и так и все "исполняется и исполняется" без окончания, как будто завис (хотя всего 1600 строк).

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
-- Мои данные:
Time	    Speedknots	Speedkm	Acc
1449751931.976	1.500	0.772	(null)
1449751932.476	1.500	0.772	(null)
1449751932.976	1.800	0.926	(null)
1449751933.476	1.800	0.926	(null)
1449751933.976	1.900	0.977	(null)
1449751934.475	1.900	0.977	(null)

-- Таблица:
CREATE TABLE auto.androgps (
  Time decimal(20, 3) DEFAULT NULL,
  Speedknots decimal(20, 3) DEFAULT NULL,
  Speedkm decimal(20, 3) DEFAULT NULL,
  Acc decimal(20, 3) DEFAULT NULL

-- запрос:
select t0.Time as curr_t, t1.Time as prev_t, t0.Speedkm as curr_v, t1.Speedkm as prev_v, (t0.Speedkm - coalesce(t1.Speedkm,0))/(t0.Time - coalesce(t1.Time,0)) AS acc
  from androgps t0
  left join androgps t1
    on t0.Time > t1.Time
   and not exists
       (
         select null
           from androgps t2
          where t2.Time < t0.Time
            and t2.Time > t1.Time
       )
 order by t0.Time
...
Рейтинг: 0 / 0
15.12.2015, 17:11:43
    #39128871
Формула использующая текущее и предыдущее значение столбца для расчета (расчет ускорения)
michail_s,

Нужно not exists переписать через левый Джои. Либо проиндексировать таблицу по полям соединения из not exists подзапроса
...
Рейтинг: 0 / 0
15.12.2015, 17:27:44
    #39128890
michail_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формула использующая текущее и предыдущее значение столбца для расчета (расчет ускорения)
Добрый Э - Эх,

Хорошо, попробую.
Поправка - вышеуказанный скрипт выполняется, только на его выполнение ушло более 10 мин.
...
Рейтинг: 0 / 0
16.12.2015, 16:55:34
    #39129986
michail_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формула использующая текущее и предыдущее значение столбца для расчета (расчет ускорения)
Не могу никак сообразить как этот запрос мне переделать из Select в Update, чтобы результаты запроса сразу добавлялись в таблицу
androgps в существующий столбец Acc. Может кто подскажет, спасибо.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select t0.Time as curr_t, t1.Time as prev_t, t0.Speedkm as curr_v, t1.Speedkm as prev_v, (t0.Speedkm - coalesce(t1.Speedkm,0))/(t0.Time - coalesce(t1.Time,0)) AS acc
  from androgps t0
  left join androgps t1
    on t0.Time > t1.Time
   and not exists
       (
         select null
           from androgps t2
          where t2.Time < t0.Time
            and t2.Time > t1.Time
       )
 order by t0.Time
...
Рейтинг: 0 / 0
17.12.2015, 07:27:24
    #39130389
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формула использующая текущее и предыдущее значение столбца для расчета (расчет ускорения)
Можно, конечно, такое написать, но читабельность будет ниже плинтуса. Проще будет вытащить результат расчёта ускорения во временную таблицу, а потом вторым отдельным запросом проапдейтить androgps.
ЗЫ. На будущее рассмотрите вариант - повесить на таблицу before insert триггер с расчётом ускорения для текущей записи.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Формула использующая текущее и предыдущее значение столбца для расчета (расчет ускорения) / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]