Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запомнить max значение / 8 сообщений из 8, страница 1 из 1
08.09.2014, 02:06:48
    #38740102
lindex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запомнить max значение
Добрый день, есть таблица в БД, в которой для каждой записи есть цифровое значение, которое обновляется время от времени (иногда довольно часто, раз в 15с). Требуется сделать новое поле, в котором будет записывать максимальное значение. Расскажите, пожалуйста, как это реализовать.
...
Рейтинг: 0 / 0
08.09.2014, 06:19:43
    #38740121
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запомнить max значение
lindex, если имеется в виду "хранить в поле Б каждой записи максимальное значение из всех, присваивавшихся полю А этой же записи", то триггером на before update. ну и на before insert.
...
Рейтинг: 0 / 0
08.09.2014, 13:53:19
    #38740519
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запомнить max значение
lindexДобрый день, есть таблица в БД, в которой для каждой записи есть цифровое значение, которое обновляется время от времени (иногда довольно часто, раз в 15с). Требуется сделать новое поле, в котором будет записывать максимальное значение. Расскажите, пожалуйста, как это реализовать.

пусть есть таблица
Код: sql
1.
create t (id int auto_increment, dat int, maxDat int, primary key(id));



тогда вот такой запрос всем полям обновит максимум из двух чисел: нового dat и ныне действующего максимума
Код: sql
1.
update t set maxDat = greatest(dat, maxDat)



такой запрос сделает тоже самое, но для заданного поля с номером 5
Код: sql
1.
update t set maxDat = greatest(dat, maxDat) where id = 5



вот такой запрос проставит каждой записи максимум по всем записям
Код: sql
1.
2.
3.
4.
5.
6.
update t set maxDat = 
(
    select max(dat) from 
        (select dat from t union select maxDat from t) tin 
    limit 1
)
...
Рейтинг: 0 / 0
08.09.2014, 15:52:27
    #38740723
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запомнить max значение
LumixlindexДобрый день, есть таблица в БД, в которой для каждой записи есть цифровое значение, которое обновляется время от времени (иногда довольно часто, раз в 15с). Требуется сделать новое поле, в котором будет записывать максимальное значение. Расскажите, пожалуйста, как это реализовать.

пусть есть таблица
Код: sql
1.
create t (id int auto_increment, dat int, maxDat int, primary key(id));



тогда вот такой запрос всем полям обновит максимум из двух чисел: нового dat и ныне действующего максимума
Код: sql
1.
update t set maxDat = greatest(dat, maxDat)



такой запрос сделает тоже самое, но для заданного поля с номером 5
Код: sql
1.
update t set maxDat = greatest(dat, maxDat) where id = 5



вот такой запрос проставит каждой записи максимум по всем записям
Код: sql
1.
2.
3.
4.
5.
6.
update t set maxDat = 
(
    select max(dat) from 
        (select dat from t union select maxDat from t) tin 
    limit 1
)



думаеться мне двойной селект, дабы избежать ошибки - не использовать в сабквери таблицу где бновляем...

никчему из внутреннего подзапроса во внешний подзапрос тащить весь список айдишников
лучше сразу взять максимальный.

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

update t set maxDat = (select * from (select max(dat) from t)d)
както так.
...
Рейтинг: 0 / 0
08.09.2014, 17:13:41
    #38740857
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запомнить max значение
alex564657498765453update t set maxDat = (select * from (select max(dat) from t)d)
както так.

в этом запросе берется максимальное по полю dat, тогда как подлинный максимум может содержаться либо в dat, либо в maxDat, именно поэтому в подвале дерева лежит юнион

насчет макса в подвале...
я не совсем знаю как ведут себя запросы типа таких

Код: sql
1.
select max(a) from a union select max(b) from a



поэтому лично я всю жизнь делал с выносом макса

Код: sql
1.
select max(a) from (select a from a union select b from a) t
...
Рейтинг: 0 / 0
08.09.2014, 17:30:20
    #38740886
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запомнить max значение
Lumixя не совсем знаю как ведут себя запросы типа такиха что тут непонятного? берутся 2 значения, ьакс(а) и макс(б), выводятся либо оба(если разные), либо одно(если одинаковые)
...
Рейтинг: 0 / 0
08.09.2014, 17:30:54
    #38740887
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запомнить max значение
Lumixпоэтому лично я всю жизнь делал с выносом максаэто какбэ вообще разные запросы получаются :)
...
Рейтинг: 0 / 0
08.09.2014, 17:39:22
    #38740904
lindex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запомнить max значение
tanglirlindex, если имеется в виду "хранить в поле Б каждой записи максимальное значение из всех, присваивавшихся полю А этой же записи", то триггером на before update. ну и на before insert.
Угу.


Всем большое спасибо!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запомнить max значение / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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