@Drumsid

Запрос в бд с join?

Есть две таблицы
urls: id, name, created_at, updated_at;
и
urls_checks: id, url_id, status, created_at, updated_at;
делаю такой запрос
SELECT * FROM urls JOIN url_checks ON urls.id = url_checks.url_id

т.к. в url_checks может быть много одинаковых url_id мне нужно только 1 максимальное по полю url_checks.updated_at
не пойму как отфильтровать это? пробовал добавить типа
HAVING/WHERE max(url_checks.updated_at)
не работает.... ни HAVING ни WHERE, подскажите где под черпнуть информацию, если такой запрос возможен конечно? а может я с синтаксисом че то напутал...
пытаюсь гуглить но именно мой случай никак не найду.
  • Вопрос задан
  • 66 просмотров
Пригласить эксперта
Ответы на вопрос 1
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Используем window functions:
SELECT 
	*
FROM (
  SELECT
	  url_id,
	  status,
	  updated_at,
	  ROW_NUMBER() OVER (PARTITION BY url_id ORDER BY updated_at DESC) rn
  FROM urls_checks
  ORDER BY urls_checks DESC
) checks 
JOIN urls on urls.id = checks.url_id
WHERE rn = 1;


SQL fiddle
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы