Jag förstår inte varför du skulle behöva den syntetiska nyckeln, så jag använder den här tabellen istället:
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 aritmetiska datumsyntaxen är förmodligen fel men du förstår tanken
se ovan, lägg till ORDER BY curr.weight - prev.weight DESC
och LIMIT N
för de två sista frågorna:spekulera inte, undersök utförandeplanerna. (postgresql har EXPLAIN ANALYZE
, vet inte om mysql) kommer du förmodligen att behöva indexera kolumner som deltar i WHERE
och JOIN
, inte de som bildar resultatuppsättningen.