SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 04.07.2010 13:17:41

RusAlex
Участник
Зарегистрирован: 27.06.2010
Сообщений: 8

нужна помощь с подзапросом

есть 2 таблицы

time
id, loginid, timestamp

login
id, name


нужно выбрать в результате такие поля

login.id, login.name, days_in_a_row,
где days_in_a_row это сколько дней подряд такойто loginid появляется в таблице time. Допустим он заходил
Пн
Вт
Чт
Пт
Вс
Вт

Подряд считаем только Пн-Вт + Чт-Пт = 4 дня подряд.

Неактивен

 

#2 05.07.2010 13:41:34

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: нужна помощь с подзапросом

Сходу приходит в голову только курсором. Возможно, через IF можно как-то написать.
Попробуйте поиграть с более простой табличкой:

Код:

mysql> select * from z order by a;
+------+
| a    |
+------+
|    1 |
|    2 |
|    4 |
|    5 |
|    7 |
|    9 |
+------+
6 rows in set (0.00 sec)

С ней можно, например, получить разницу с предыдущим значением вот так:

Код:

mysql> SELECT @c := a FROM z ORDER BY a LIMIT 1; SELECT a, a - @c AS diff, @c := a FROM z ORDER BY a;
+---------+
| @c := a |
+---------+
|       1 |
+---------+
1 row in set (0.00 sec)

+------+------+---------+
| a    | diff | @c := a |
+------+------+---------+
|    1 |    0 |       1 |
|    2 |    1 |       2 |
|    4 |    2 |       4 |
|    5 |    1 |       5 |
|    7 |    2 |       7 |
|    9 |    2 |       9 |
+------+------+---------+
6 rows in set (0.00 sec)

Собственно, Вас интересуют строки с diff=1, но только тупо просуммировать —
неправильно (потому что у Вас отличается случай двух единиц подряд и двух
единиц через двойку). Нужно, видимо, эту штуку брать еще раз в подзапрос
и считать количество единичек подряд.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson