|
|
|
Определение максимального значения на определенные даты
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Задача такая - есть таблица, в которой хранится история изменений статуса юзера, содержит такие поля id,dateCreated,idUser,idNewStatus Стоит задача определить статус юзера по состоянию на конец каждого месяца с момента регистрации по текущий месяц. Хочу уточнить момент:статусы могут только повышаться, т.е. по сути надо найти максимальный статус на конец месяца Честно говоря, не совсем пойму как это сделать чисто средствами mysql, не прибегая к php ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2013, 00:36:49 |
|
||
|
Определение максимального значения на определенные даты
|
|||
|---|---|---|---|
|
#18+
См. FAQ про переменные и про группы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2013, 00:44:36 |
|
||
|
Определение максимального значения на определенные даты
|
|||
|---|---|---|---|
|
#18+
miksoftСм. FAQ про переменные и про группы. ясно. киньте ссылку, если не затруднит, а то я на форуме плохо ориентируюсь. В разделе FAQ - http://www.sql.ru/faq/faq.aspx не нашел нужной информации, а поиск по-ходу только по темам ищет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2013, 01:25:53 |
|
||
|
Определение максимального значения на определенные даты
|
|||
|---|---|---|---|
|
#18+
Eugene87Здравствуйте! Задача такая - есть таблица, в которой хранится история изменений статуса юзера, содержит такие поля id,dateCreated,idUser,idNewStatus Стоит задача определить статус юзера по состоянию на конец каждого месяца с момента регистрации по текущий месяц. Хочу уточнить момент:статусы могут только повышаться, т.е. по сути надо найти максимальный статус на конец месяца Честно говоря, не совсем пойму как это сделать чисто средствами mysql, не прибегая к php задачу можно решить несколькими способами, выбирайте: 1. зная что статус только расте то просто максимум ппо мезяцам: select date_format(dateCreated,'%Y-%m') year_month, max(status) max_status from users where user_id = 123 group by 1 2. если статус таки иногда падает, то ФАК -- выборка первой/послдней записи в группах. В данном контексте -- группа это месяц 3. Если статусы строго каждодневные, то можно задать пробег по месяцам и выбирать записи конкретно на последний день каждого месяца. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2013, 04:51:47 |
|
||
|
Определение максимального значения на определенные даты
|
|||
|---|---|---|---|
|
#18+
javajdbcEugene87Здравствуйте! Задача такая - есть таблица, в которой хранится история изменений статуса юзера, содержит такие поля id,dateCreated,idUser,idNewStatus Стоит задача определить статус юзера по состоянию на конец каждого месяца с момента регистрации по текущий месяц. Хочу уточнить момент:статусы могут только повышаться, т.е. по сути надо найти максимальный статус на конец месяца Честно говоря, не совсем пойму как это сделать чисто средствами mysql, не прибегая к php задачу можно решить несколькими способами, выбирайте: 1. зная что статус только расте то просто максимум ппо мезяцам: select date_format(dateCreated,'%Y-%m') year_month, max(status) max_status from users where user_id = 123 group by 1 2. если статус таки иногда падает, то ФАК -- выборка первой/послдней записи в группах. В данном контексте -- группа это месяц 3. Если статусы строго каждодневные, то можно задать пробег по месяцам и выбирать записи конкретно на последний день каждого месяца. Решение как в п.1 не получиться применить, так как в конкретном месяце статус вообще мог не меняться. Например, статус менялся два раза в августе, а потом следующее изменение произошло только в октябре. Вышеуказанный запрос вернет ответ такого вида 2013-08 Статус1 2013-10 Статус2 т.е. записи для сентября не будет, так как в этом месяце не было изменения статуса. Если бы этот результат сразу отправлялся на вывод, то это не проблема. Но этот запрос планируется использовать как подзапрос и связь будет именно по полю с месяцем year_month, т.е. поле с месяцем 2013-09 необходимо явно отобразить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2013, 05:27:08 |
|
||
|
Определение максимального значения на определенные даты
|
|||
|---|---|---|---|
|
#18+
Eugene87, тогда вам надо так или иначе иметь "опорную" таблицу со всеми требуемыми месяцами: select mesyc, (select max(status) from user_stat where id = 123 and dateCrea < mesqc) max_status from mesyci месяцы должны быть указаны как , например, '2013-04-01'. Статус будет выдан на предыдуший момент, т.е. на 2013-03-31 23:59:59 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2013, 06:34:45 |
|
||
|
|

start [/forum/topic.php?fid=47&gotonew=1&tid=1835716]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
27ms |
get topic data: |
6ms |
get first new msg: |
3ms |
get forum data: |
2ms |
get page messages: |
24ms |
get tp. blocked users: |
1ms |
| others: | 194ms |
| total: | 274ms |

| 0 / 0 |
