なぜ合成キーが必要なのかわからないので、代わりにこのテーブルを使用します:
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'
;
日付の算術構文はおそらく間違っていますが、あなたは考えを理解します
上記を参照して、ORDER BY curr.weight - prev.weight DESC
を追加してください およびLIMIT N
最後の2つの質問については、推測しないで、実行計画を調べてください。 (postgresqlにはEXPLAIN ANALYZE
があります 、mysqlについてはわかりません)おそらく、WHERE
に参加する列にインデックスを付ける必要があることに気付くでしょう。 およびJOIN
、結果セットを形成するものではありません。