powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как выбрать только разные записи, идущие подряд?
5 сообщений из 5, страница 1 из 1
Как выбрать только разные записи, идущие подряд?
    #39119350
SweetApple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть табличка (упрощенный вариант):
id store_id
1 8
2 7
3 7
4 3
5 8
6 8
7 0
8 0
9 8

Нужно, чтобы запрос выбрал записи с id 9, 7, 5, 4, 2, 1 - т.е. те, где значения store_id от записи к записи меняется.
Это реально сделать только с помощью SQL?
...
Рейтинг: 0 / 0
Как выбрать только разные записи, идущие подряд?
    #39119355
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реально.
Как вариант, с помощью переменных - 7489069
...
Рейтинг: 0 / 0
Как выбрать только разные записи, идущие подряд?
    #39119358
SweetApple,

реально.
...
Рейтинг: 0 / 0
Как выбрать только разные записи, идущие подряд?
    #39119375
SweetApple,

если ID идут подряд (без пропусков), то как вариант:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select min(id) as x_id, store_id
  from (
         select t0.*, t0.id - count(1) as grp_id
           from t t0
           join t t1
             on t0.store_id = t1.store_id
            and t0.id >= t1.id
          group by t0.id, t0.store_id
       )
 group by store_id, grp_id
 order by min(id)



Если пропуски есть, то немного сложнее
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select min(id) as x_id, store_id
  from (
         select t0.*, count(distinct t1.id) - count(distinct t2.id) as grp_id
           from t t0
           join t t1
             on t0.store_id = t1.store_id
            and t0.id >= t1.id
           join t t2
             on t0.id >= t2.id
          group by t0.id, t0.store_id
       )
 group by store_id, grp_id
 order by min(id)
...
Рейтинг: 0 / 0
Как выбрать только разные записи, идущие подряд?
    #39119383
Добрый Э - Эх,

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select min(id) as x_id, store_id
  from (
         select t0.*,count(1) - max(t1.cnt) as grp_id
           from t t0
           join (
                  select t0.id, t0.store_id, count(1) as cnt
                    from t t0
                    join t t1
                      on t0.id >= t1.id
                   group by t0.id, t0.store_id 
                ) t1
             on t0.store_id = t1.store_id
            and t0.id >= t1.id
          group by t0.id, t0.store_id
       )
 group by store_id, grp_id
 order by min(id)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как выбрать только разные записи, идущие подряд?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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