Mysql
 sql >> Base de données >  >> RDS >> Mysql

conception de table + question SQL

Je ne vois pas pourquoi vous devriez avoir besoin de la clé synthétique, je vais donc utiliser ce tableau à la place :

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 syntaxe arithmétique de la date est probablement fausse mais vous voyez l'idée

voir ci-dessus, ajouter ORDER BY curr.weight - prev.weight DESC et LIMIT N

pour les deux dernières questions :ne spéculez pas, examinez les plans d'exécution. (postgresql a EXPLAIN ANALYZE , je ne sais pas pour mysql) vous aurez probablement besoin d'indexer les colonnes qui participent à WHERE et JOIN , pas ceux qui forment le jeu de résultats.