Как же мне было влом решать задачу! __Собес на деньги: 320к - 350к на руки__ Скажу честно, когда вижу задачу на собесе с лайвкодингом, сразу хочется просто скопировать в LLM и выдать ответ. Потому что оно реально так и решается. Я просто потерял смысл попыток решений таких задач. Кто пишет код вручную.. ну скорее всего сын маминой подруги. И тот самый айтишник, который в ОЙТИ еще со времен Рюрика. Кстати, выражаю огромный респект всем трушным программистам. Сейчас ОЙТИ уже не то... Я в этот раз решил честно все пройти, попробовать. Но, как же мне было влом... Ну буквально надо вырыть яму лопатой, когда рядом стоит эксаватор) Я написал где-то четверть и полностью забил на все нюансы из условий задачи. Задача на мой взгляд непростая. В плане надо сразу несколько условий держать в голове. Плюс это CLICKHOUSE. Какая компания, говорить не буду. Ну либо за 1млн долларов. ```Есть таблица ClickHouse: CREATE TABLE default.migration_report ( RunId UUID, CollectionName String, DocumentName String, StartedAt Nullable(DateTime), CompletedAt Nullable(DateTime), LastError String ) ENGINE = ReplacingMergeTree ORDER BY RunId SETTINGS index_granularity = 8192; Необходимо посчитать количество успешных и неуспешных загрузок за последний календарный месяц. Результат должен содержать два столбца: | succeeded | failed | Условия: 1. Расчёт выполняется отдельно для каждого источника (`CollectionName`) и каждого календарного дня. 2. В течение одного дня у одного источника может быть несколько загрузок. 3. Если у источника произошла неуспешная загрузка (`LastError != ''`), то эта загрузка учитывается как failed, а все последующие загрузки этого источника в этот же день не учитываются. 4. Успешной считается загрузка, у которой `LastError = ''`. 5. Для преобразования даты и времени можно использовать функцию `toDate()`. Напишите SQL-запрос для ClickHouse.``` Решение задачи ```WITH toStartOfMonth(addMonths(today(), -1)) AS month_start, toStartOfMonth(today()) AS month_end SELECT countIf(LastError = '' AND previous_failed = 0) AS succeeded, countIf(LastError != '' AND previous_failed = 0) AS failed FROM ( SELECT CollectionName, toDate(StartedAt) AS upload_date, LastError, sum(LastError != '') OVER ( PARTITION BY CollectionName, toDate(StartedAt) ORDER BY StartedAt, RunId ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING ) AS previous_failed FROM default.migration_report WHERE StartedAt >= month_start AND StartedAt < month_end )```