powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбор записей с одинаковым значением подряд
1 сообщений из 1, страница 1 из 1
Выбор записей с одинаковым значением подряд
    #38635308
sssaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

Очень нужна помощь.

Есть таблица вида:

«ip_address» «time» «result»
«10.10.10.1» «30.01.2012 15:45:17» «Не доступен»
«10.10.10.2» «30.01.2012 15:45:18» «Доступен»
«10.10.10.1» «30.01.2012 15:48:17» «Не доступен»
«10.10.10.2» «30.01.2012 15:48:18» «Не доступен»
«10.10.10.1» «30.01.2012 15:51:17» «Не доступен»
«10.10.10.2» «30.01.2012 15:51:18» «Не доступен»
«10.10.10.1» «30.01.2012 15:54:17» «Доступен»
«10.10.10.2» «30.01.2012 15:54:18» «Не доступен»
«10.10.10.1» «30.01.2012 15:57:17» «Не доступен»
«10.10.10.2» «30.01.2012 15:57:18» «Не доступен»
«10.10.10.1» «30.01.2012 16:00:17» «Не доступен»
«10.10.10.2» «30.01.2012 16:00:18» «Не доступен»
«10.10.10.1» «30.01.2012 16:03:17» «Не доступен»
«10.10.10.2» «30.01.2012 16:03:18» «Не доступен»
...

Есть скрипт, который выбирает записи с одинаковым значением подряд по одному Ip.
Как сделать так, чтобы выбирались записи по всем ip?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select ip_address, min(time)Time_n, max(time)Time_x, result
   from(
     select
       @npp:=if(@ip=ip_address,@npp+1,1)npp,
       @npr:=if(@ip=ip_address and @rz=result,@npr+1,
         if((@ip:=ip_address)+(@rz:=result),1,1))npr,
       t.*
     from (select * from all_info where ip_address = «10.10.10.1») t
     cross join (
       select @ip:=null ip, @rz:=null rz, @npp:=null n, @npr:=null r
       )v
     order by t.date, t.time, ip_address
     )f
where result = «Не доступен»
   group by ip_address, npp-npr
   having count(*)>=3



Результат примера:
«10.10.10.1» «30.01.2012 15:45:17» «30.01.2012 15:51:17» «Не доступен»
«10.10.10.1» «30.01.2012 15:57:17» «30.01.2012 16:03:17» «Не доступен»

А надо, чтобы выводилось так:
«10.10.10.1» «30.01.2012 15:45:17» «30.01.2012 15:51:17» «Не доступен»
«10.10.10.1» «30.01.2012 15:57:17» «30.01.2012 16:03:17» «Не доступен»
«10.10.10.2» «30.01.2012 15:48:18» «30.01.2012 16:03:18» «Не доступен»

Если поменять строчку
Код: sql
1.
 from (select * from all_info where ip_address = «10.10.10.1») t


на
Код: sql
1.
 from all_info t


то выдает обобщенный результат(сгруппированы по ip)

«10.10.10.1» «30.01.2012 15:45:17» «30.01.2012 16:03:17» «Не доступен»
«10.10.10.2» «30.01.2012 15:48:18» «30.01.2012 16:03:18» «Не доступен»

А нам нужны все промежутки при которых запись "Не доступен" была от 3 и более раз подряд, как в следующем примере:

«10.10.10.1» «30.01.2012 15:45:17» «30.01.2012 15:51:17» «Не доступен»
«10.10.10.1» «30.01.2012 15:57:17» «30.01.2012 16:03:17» «Не доступен»
«10.10.10.2» «30.01.2012 15:48:18» «30.01.2012 16:03:18» «Не доступен»
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбор записей с одинаковым значением подряд
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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