У меня есть таблица, содержащая время выполнения для генераторов на разных сайтах, и я хочу выбрать самую последнюю запись для каждого сайта. Каждый генератор запускается один или два раза в неделю.
У меня есть запрос, который сделает это, но мне интересно, если это лучший вариант. Я не могу не думать, что использование WHERE x IN (SELECT ...) лениво и не лучший способ сформулировать запрос - любой запрос.
Таблица выглядит следующим образом:
CREATE TABLE generator_logs (
id integer NOT NULL,
site_id character varying(4) NOT NULL,
start timestamp without time zone NOT NULL,
"end" timestamp without time zone NOT NULL,
duration integer NOT NULL
);
И запрос:
SELECT id, site_id, start, "end", duration
FROM generator_logs
WHERE start IN (SELECT MAX(start) AS start
FROM generator_logs
GROUP BY site_id)
ORDER BY start DESC
Объем данных невелик, поэтому я не беспокоюсь об оптимизации запроса. Однако мне приходится делать аналогичные вещи с таблицами с десятками миллионов строк (насколько мне известно, с большими таблицами!), И там оптимизация важнее.
Так есть ли лучший запрос для этого и являются ли встроенные запросы вообще плохой идеей?