Mysql
 sql >> Database >  >> RDS >> Mysql

disegno della tabella + domanda SQL

Non vedo perché dovresti aver bisogno della chiave sintetica, quindi userò invece questa tabella:

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

la sintassi aritmetica della data probabilmente è sbagliata ma ti sei fatto un'idea

vedi sopra, aggiungi ORDER BY curr.weight - prev.weight DESC e LIMIT N

per le ultime due domande:non speculare, esamina i piani di esecuzione. (postgresql ha EXPLAIN ANALYZE , non so su mysql) probabilmente scoprirai di dover indicizzare le colonne che partecipano a WHERE e JOIN , non quelli che formano il set di risultati.