Ik zie niet in waarom je de synthetische sleutel nodig zou hebben, dus ik gebruik in plaats daarvan deze tabel:
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'
;
de datumberekeningssyntaxis is waarschijnlijk verkeerd, maar je snapt het idee
zie hierboven, voeg ORDER BY curr.weight - prev.weight DESC
. toe en LIMIT N
voor de laatste twee vragen:niet speculeren, uitvoeringsplannen onderzoeken. (postgresql heeft EXPLAIN ANALYZE
, weet niet over mysql) zult u waarschijnlijk merken dat u kolommen moet indexeren die deelnemen aan WHERE
en JOIN
, niet degenen die de resultatenset vormen.