@koliane

Как сделать выборку в MySQL фильтрации значений, идущих подряд?

Есть таблица "table". В ней 1 столбец "s1". Тип значений - целые числа. Стоит задача: вывести те строки, значения которых идут подряд от n кол-ва раз.
Пример: есть таблица 1ac2e6d0452744beb95d0e927940bc9e.png Необходимо из нее выбрать значения, идущие подряд 3 и более раз. Т.е. результат должен быть следующим: 3fbee6060df146e59476ab58a9b735bd.png
Подскажите, как можно это реализовать?
  • Вопрос задан
  • 596 просмотров
Решения вопроса 1
0xD34F
@0xD34F
Можно так:

SELECT t2.s1
FROM (
  SELECT
    t1.id,
    t1.s1,
    IF (@max = 1, @max := t1.seq, @max := @max) AS "max1",
    IF (t1.seq = 1, @max := 1, @max := @max) AS "max2"
  FROM (
    SELECT
      (SELECT @id := @id + 1) AS "id",
      s1,
      IF (s1 = @prev + 1, @seq := @seq + 1, @seq := 1) AS "seq",
      (SELECT @prev := s1) AS "prev"
    FROM `table`,
    (SELECT @id := 0, @seq := 0, @prev := null) AS init
  ) AS t1,
  (SELECT @max := 1) AS init
  ORDER BY t1.id DESC
) AS t2
WHERE t2.max1 >= 3
ORDER BY t2.id

Ещё можно добавить в таблицу дополнительный столбец, в котором будет храниться количество записей, принадлежащих к текущей серии последовательных значений и заполнять/обновлять его в триггере, при вставке новых записей в таблицу. Тогда таблица будет выглядеть как-то так:

s1 | n
 1   3
 2   3
 3   3
 7   1
12   1
22   2
23   2
 5   4
 6   4
 7   4
 8   4

А получение нужных записей будет совсем тривиальным:

SELECT s1 FROM `table` WHERE n > 2
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы