Какой sql запрос нужен чтобы получить последнюю дату события для каждого домена?
Есть таблица по crawls на разные домены. Нужно узнать даты последних кроулов для каждого домена. Всего их 13.
Вот такой код выдаёт ошибку и является неполноценным. При его правильном написании сможет показать только последние даты.
SELECT * FROM Crawl_Datetime LIMIT 1000
WHERE date =
(SELECT MAX(date) FROM Crawl_Datetime
Текст ошибки:
Syntax error: Expected end of input but got keyword WHERE at [2:1]
Дополнительно:
LIMIT надо в конце писать.
SELECT `domain`, MAX(`date`) as `max_date` FROM `crawls` GROUP BY `domain` ORDER BY `max_date` DESC LIMIT 1000 |
SELECT `domain`, MAX(`date`) as `max_date` FROM `crawls` GROUP BY `domain` ORDER BY `max_date` DESC LIMIT 1000
Текст ошибки:
Syntax error: Expected end of input but got keyword WHERE at [2:1]
Этот текст ошибки никакого отношения к MySQL не имеет даже приблизительно... По тексту сообщения больше похоже на BigQuery.
Так что если пишешь про себя "Изучаю SQL" - то начни с изучения, какую СУБД используешь, что ли.
Нужно узнать даты последних кроулов для каждого домена. Всего их 13.
Если нужна только дата - нафига ты выбираешь все поля (SELECT *) ?
Если их "всего 13" - нафига LIMIT 1000 ?
Возможно это не простая таблица а Google Big Table. Тогда обычные практики оптимизации SQL могут плохо работать. Я-бы предложил не использовать group by а переписать с window functions если gbt это поддерживает. И посмотреть как партицирована таблица. Возможно под специфичный query стоит сменить partitioning если там он дефолтный или неудачный.
Ответы:
WITH cte AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY domain ORDER BY date DESC) AS rn FROM Crawl_Datetime ) SELECT * FROM cte WHERE rn = 1 |
WITH cte AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY domain ORDER BY date DESC) AS rn FROM Crawl_Datetime ) SELECT * FROM cte WHERE rn = 1
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для того чтобы получить последнюю дату события для каждого домена, вам необходимо использовать SQL запрос с группировкой и встроенной функцией MAX для определения последней даты.
Пример SQL запроса для этой задачи может выглядеть следующим образом:
SELECT domain, MAX(event_date) AS last_event_date FROM events GROUP BY domain;
В данном запросе мы выбираем столбец "domain" из таблицы "events" и используем функцию MAX для определения последней даты события для каждого домена. Затем мы группируем результаты по столбцу "domain" с помощью оператора GROUP BY.
После выполнения этого запроса, вы получите результат, в котором будет указана каждый домен и его последняя дата события.
Убедитесь, что в вашей таблице "events" есть столбец "event_date", содержащий дату события. Если названия столбцов или таблиц отличаются от приведенных в примере, замените их соответствующими названиями из вашей базы данных.
Таким образом, данный SQL запрос поможет вам получить последнюю дату события для каждого домена в вашей базе данных.