Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Tabellendesign + SQL-Frage

Ich verstehe nicht, warum Sie den synthetischen Schlüssel brauchen sollten, also verwende ich stattdessen diese Tabelle:

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'
;

Die arithmetische Datumssyntax ist wahrscheinlich falsch, aber Sie verstehen, worauf es ankommt

siehe oben, füge ORDER BY curr.weight - prev.weight DESC hinzu und LIMIT N

zu den letzten beiden Fragen:Nicht spekulieren, Ausführungspläne prüfen. (postgresql hat EXPLAIN ANALYZE , keine Ahnung von mysql) werden Sie wahrscheinlich feststellen, dass Sie Spalten indizieren müssen, die an WHERE teilnehmen und JOIN , nicht diejenigen, die die Ergebnismenge bilden.