Как в запросе select (mysql) можно посчитать количество последних значений, равных между собой, и идущих непрерывно?

343
17 января 2017, 23:58

Как в запросе select (mysql) можно посчитать количество последних значений, равных между собой, и идущих непрерывно?

Вот пример таблицы: http://c2n.me/3Gqmp8u

В данном случае, запрос должен вернуть 2.

Answer 1
SELECT MAX(x.num) - MIN(x.num) result
FROM (
     SELECT MAX(id_chat_message) num, is_readed
     FROM `table`
     GROUP BY is_readed
     ) x

Если в значениях id_chat_message имеются "дырки", то, например,

SELECT COUNT(*)
FROM `table`
WHERE id_chat_message > (
                        SELECT MIN(x.num)
                        FROM (
                             SELECT MAX(id_chat_message) num, is_readed
                             FROM `table`
                             GROUP BY is_readed
                             ) x
                        )

При любом количестве возможных значений статуса и наличии хотя бы 2 записей с разными статусами вроде должен дать верный результат такой запрос:

SELECT COUNT(*)
FROM `table`
WHERE id_chat_message > (               
                        SELECT MAX(id_chat_message)
                        FROM `table`
                        GROUP BY is_readed
                        ORDER BY 1 DESC 
                        LIMIT 2,1
                        )
READ ALSO
система уведомлений php

система уведомлений php

здравствуйте, есть сайт

394
Выборка строк mysql по заданному парамерту

Выборка строк mysql по заданному парамерту

Суть следующая: Имеется таблица

405
Отваливается general_log в mariadb

Отваливается general_log в mariadb

Есть необходимость писать все запросы к БД в файлДля этого включаю в настройках (переменные сервера) general_log=1 Однако спустя время (возможно...

293
Проблемы с восстановлением сайта на Joomla

Проблемы с восстановлением сайта на Joomla

Всем приветЕсть бэкап Joomla сайта, сделанный в Akeeba

341