Как найти наибольшее количество последовательных нулей в столбце MySQL?

Предположим, у меня есть таблица, состоящая из чего-то вроде:

    date   | A | B |   C  |
02/01/2020 | 3 | 5 | null |
03/01/2020 | 8 | 3 | null |
04/01/2020 | 3 | 4 | null |
05/01/2020 | 5 | 9 |   3  |
06/01/2020 | 3 | 3 | null |
07/01/2020 | 1 | 2 | null |
08/01/2020 | 5 | 9 |   5  |

Как написать запрос, возвращающий наибольшее количество последовательных нулей в столбце C? В этом случае ответ должен быть 3.

Я пробовал искать в Интернете и задавать вопросы магистрам права, но так и не нашел ответа, который мне помог бы.

С уважением и спасибо за вашу помощь.

Я пробовал такие запросы, как:

SELECT 
    `C`, 
    COUNT(*) AS table_name
FROM 
    (SELECT 
        `C`, 
        IFNULL(`C`, 0) AS points
    FROM 
        table_name) AS subquery
GROUP BY 
    `C`
HAVING 
    COUNT(*) > 1;

Но это не анализ последовательных нулей, а просто подсчет групп разных значений для столбцов в целом. Я даже не знаю, с чего начать.

Вы пробовали задать чатгпт?

Andrii Sukhoi 19.06.2024 14:30

Помогите нам помочь вам, отредактируйте свой вопрос, включив в него таблицу создания и вставки примеров данных.

ysth 19.06.2024 14:30

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

4dmh4 19.06.2024 16:38
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
3
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте COUNT OVER, чтобы получить текущий подсчет значений в C, и используйте его в качестве группового ключа. Затем сгруппируйте по этому ключу, посчитайте нули и возьмите строку результата с максимальным количеством нулей.

Иллюстрация групп:

ДТ А Б С ВРП объяснение 2020-01-02 3 5 нулевой 0 пока никакой ценности 2020-01-03 8 3 нулевой 0 пока никакой ценности 2020-01-04 3 4 нулевой 0 пока никакой ценности 05.01.2020 5 9 3 1 3 — первое значение C 06.01.2020 3 3 нулевой 1 все еще только значение 3 07.01.2020 1 2 нулевой 1 все еще только значение 3 07.01.2020 5 9 5 2 теперь два значения, 3 и 5

Полный запрос:

select
  count(*) - count(c) as consecutive_nulls
from
(
  select 
    t.*,
    count(c) over (order by dt) as grp
  from mytable t
)
group by grp
order by consecutive_nulls desc
limit 1;

Сработало просто блестяще. «Пересчет» — это то, с чем я раньше не сталкивался, и его полезно добавить в свой набор инструментов.

4dmh4 19.06.2024 16:37

Другие вопросы по теме