Jeg kan ikke se, hvorfor du skal bruge den syntetiske nøgle, så jeg bruger denne tabel i stedet:
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'
;
den aritmetiske datosyntaks er sandsynligvis forkert, men du forstår den
se ovenfor, tilføj ORDER BY curr.weight - prev.weight DESC
og LIMIT N
for de sidste to spørgsmål:undlad at spekulere, undersøg udførelsesplaner. (postgresql har EXPLAIN ANALYZE
, ved ikke om mysql) vil du sandsynligvis finde ud af, at du skal indeksere kolonner, der deltager i WHERE
og JOIN
, ikke dem, der udgør resultatsættet.