Посчитать максимальное количество одинаковых значений подряд - MySQL

Узнай цену своей работы

Формулировка задачи:

Всем привет. Столкнулся с такой задачей: необходимо посчитать максимальное и минимальное количество одинаковых значений подряд. Есть столбец, в котором идут положительные и отрицательные значения. Нужно посчитать максимальное количество ПОДРЯД. Т.е. к примеру: 22, 33, 56, -85, -45, 68 - здесь получается 3 подряд положительных и 2 подряд отрицательных. Помогите составить запрос SQL

Решение задачи: «Посчитать максимальное количество одинаковых значений подряд»

textual
Листинг программы
set @i=0, @p=0; 
SELECT
    t.date_open, 
    t.result_price
FROM
    ( SELECT * FROM `deals` ORDER BY `date_open`, `time_open` ) AS t 
WHERE
    ( (if (@p=date_open, @i:=@i+1,(@i:=0) or (@p:=date_open))) and @i<2);

Объяснение кода листинга программы

В этом коде используются две переменные, которые установлены в начальное значение 0: @i и @p. Затем выполняется запрос SELECT, который выбирает столбцы date_open и result_price из таблицы deals. Однако ключевая часть кода находится в подзапросе, который вычисляется сначала. В этом подзапросе используется функция IF, которая проверяет, равна ли дата текущей записи дате предыдущей записи. Если это так, то переменная @i увеличивается на 1. Если это не так, то переменная @i сбрасывается обратно в 0, а переменная @p присваивается значение текущей даты. Таким образом, этот подзапрос вычисляет серию дат, где дата следующей записи либо равна, либо не равна дате предыдущей записи. Затем основной запрос выбирает только первые две записи из этой серии. Этот код вычисляет максимальную серию одинаковых дат в таблице deals, где дата следующей записи либо равна, либо не равна дате предыдущей записи, и ограничивает эту серию до двух записей.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.143 из 5
Похожие ответы