Nechápu, proč byste měli potřebovat syntetický klíč, takže místo něj použiji tuto tabulku:
CREATE TABLE foodbar (
user_id INT NOT NULL
, created_at date not null
, weight double not null
, PRIMARY KEY (user_id, created_at)
);
SELECT curr.user_id, curr.weight - prev.weight
FROM foodbar curr, foodbar prev
WHERE curr.user_id = prev.user_id
AND curr.created_at = CURRENT_DATE
AND prev.created_at = CURRENT_DATE - INTERVAL '7 days'
;
aritmetická syntaxe data je pravděpodobně chybná, ale chápete to
viz výše, přidejte ORDER BY curr.weight - prev.weight DESC
a LIMIT N
k posledním dvěma otázkám:nespekulujte, prozkoumejte prováděcí plány. (postgresql má EXPLAIN ANALYZE
, nevím o mysql), pravděpodobně zjistíte, že potřebujete indexovat sloupce, které se účastní WHERE
a JOIN
, nikoli ty, které tvoří sadu výsledků.