Есть две таблицы
CREATE TABLE peak_sessions (
id INTEGER PRIMARY KEY,
user_id INTEGER NOT NULL,
begin_timestamp INTEGER NOT NULL,
end_timestamp INTEGER,
weight_units INTEGER DEFAULT 0,
description TEXT DEFAULT "",
FOREIGN KEY (user_id)
REFERENCES users (id)
);
CREATE TABLE peak_sessions_sets (
id INTEGER PRIMARY KEY,
session_id INTEGER NOT NULL,
number INTEGER NOT NULL,
begin_timestamp INTEGER NOT NULL,
end_timestamp INTEGER NOT NULL,
peak INTEGER NOT NULL,
description TEXT DEFAULT "",
measures BLOB NOT NULL,
FOREIGN KEY (session_id)
REFERENCES peak_sessions (id)
);
Есть peak_sessions принадлежащие конкретному user_id. Так же есть peak_sessions_sets, ссылающаяся на peak_sessions и хранящяя максимумы(peak).
Я хочу составить запрос "Среди всех peak_sessions принадлежащих пользователю peak_sessions.user_id = 1 выбрать по одной peak_sessions_sets, содержащей максимальное значение peak_sessions_sets.peak"
У меня получилось так
SELECT pss.*
FROM peak_sessions_sets pss
JOIN (
SELECT session_id, MAX(peak) AS max_peak
FROM peak_sessions_sets
JOIN peak_sessions ON peak_sessions_sets.session_id = peak_sessions.id
WHERE peak_sessions.user_id = 1
GROUP BY session_id
) max_peaks ON pss.session_id = max_peaks.session_id
AND pss.peak = max_peaks.max_peak;