Какой sql запрос нужен чтобы получить последнюю дату события для каждого домена?

Ссылка скопирована
1 ответ

Есть таблица по 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 ?

  • Akina, да, исправил на Google Cloud platform
  • Возможно это не простая таблица а 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

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Ирина WP Ответ

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

    Пример SQL запроса для этой задачи может выглядеть следующим образом:

    SELECT DOMAIN, MAX(event_date) AS last_event_date
    FROM events
    GROUP BY DOMAIN;

    SELECT domain, MAX(event_date) AS last_event_date FROM events GROUP BY domain;

    В данном запросе мы выбираем столбец "domain" из таблицы "events" и используем функцию MAX для определения последней даты события для каждого домена. Затем мы группируем результаты по столбцу "domain" с помощью оператора GROUP BY.

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

    Убедитесь, что в вашей таблице "events" есть столбец "event_date", содержащий дату события. Если названия столбцов или таблиц отличаются от приведенных в примере, замените их соответствующими названиями из вашей базы данных.

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

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно