Как же мне было влом решать задачу! Собес на деньги: 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 )