Возможно, об этом уже спрашивали, но StackOverflow огромен, и попытка найти что-то достаточно конкретное, чтобы действительно помочь, - это кошмар!
Я закончил с довольно большим запросом SQL, и мне было интересно, может ли SO указать на более простые методы, которые я мог бы пропустить.
У меня есть таблица с именем usage
со следующей структурой:
host | character varying(32) |
usage | integer |
logtime | timestamp without time zone | default now()
Я хочу получить значение использования как для MAX, так и для MIN logtimes. Проработав некоторые из моих старых учебников (некоторое время назад я действительно правильно использовал SQL), я получил следующее JOIN:
SELECT *
FROM (SELECT u.host,u.usage AS min_val,r2.min
FROM usage u
JOIN (SELECT host,min(logtime) FROM usage GROUP BY host) r2
ON u.host = r2.host AND u.logtime = r2.min) min_table
NATURAL JOIN (SELECT u.host,u.usage AS max_val,r1.max
FROM usage u
JOIN (SELECT host,max(logtime) FROM usage GROUP BY host) r1
ON u.host = r1.host AND u.logtime = r1.max) max_table
;
Это похоже на грязный способ сделать это, поскольку я в основном выполняю один и тот же запрос дважды, один раз с MAX и один раз с MIN. Я могу получить оба столбца времени журнала в одном запросе, выполнив SELECT usage,MAX(logtime),MIN(logtime) FROM ...
, но не могу понять, как затем отобразить значения использования, которые соответствуют двум различным записям.
Есть идеи?