Задать вопрос
Ответы пользователя по тегу SQL
  • Как посчитать количество подряд идущих одинаковых записей SQL?

    i229194964
    @i229194964
    Веб разработчик
    -- Выбираем все столбцы из вашей таблицы и добавляем два новых столбца:
    -- NewGroup - показывает, начинается ли новая группа записей
    -- GroupCount - показывает количество подряд идущих групп для каждой записи
    SELECT
      Date,
      Check,
      Time,
      Product,
      Qty,
      Price,
      -- Если предыдущая запись имеет ту же дату и чек, что и текущая, то это не новая группа
      -- В противном случае, это новая группа
      CASE
        WHEN LAG(Date) OVER (ORDER BY Date, Time, Check) = Date AND LAG(Check) OVER (ORDER BY Date, Time, Check) = Check THEN 0
        ELSE 1
      END AS NewGroup,
      -- Используем функцию SUM с условием для подсчета количества подряд идущих групп
      SUM(CASE
        WHEN LAG(Date) OVER (ORDER BY Date, Time, Check) = Date AND LAG(Check) OVER (ORDER BY Date, Time, Check) = Check THEN 0
        ELSE 1
      END) OVER (ORDER BY Date, Time, Check) AS GroupCount
    FROM
      YourTable
    ORDER BY
      Date, Time, Check

    пример запроса для получения максимального числа подряд идущих записей для каждого дня
    -- Используем подзапрос с предыдущим запросом для получения максимального числа подряд идущих групп для каждой даты
    SELECT
      Date,
      MAX(GroupCount) AS MaxGroupCount
    FROM (
      SELECT
        Date,
        Check,
        Time,
        Product,
        Qty,
        Price,
        -- Аналогично предыдущему запросу, создаем столбец NewGroup и используем функцию SUM с условием для подсчета количества подряд идущих групп
        CASE
          WHEN LAG(Date) OVER (ORDER BY Date, Time, Check) = Date AND LAG(Check) OVER (ORDER BY Date, Time, Check) = Check THEN 0
          ELSE 1
        END AS NewGroup,
        SUM(CASE
          WHEN LAG(Date) OVER (ORDER BY Date, Time, Check) = Date AND LAG(Check) OVER (ORDER BY Date, Time, Check) = Check THEN 0
          ELSE 1
        END) OVER (ORDER BY Date, Time, Check) AS GroupCount
      FROM
        YourTable
    ) t
    -- Группируем по дате и выбираем максимальное значение GroupCount для каждой даты
    GROUP BY
      Date
    Ответ написан