sql >> Base de Datos >  >> RDS >> Mysql

diseño de tabla + pregunta SQL

No veo por qué debería necesitar la clave sintética, así que usaré esta tabla en su lugar:

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 sintaxis aritmética de la fecha probablemente sea incorrecta, pero entiende la idea

ver arriba, agregar ORDER BY curr.weight - prev.weight DESC y LIMIT N

para las dos últimas preguntas:no especule, examine los planes de ejecución. (postgresql tiene EXPLAIN ANALYZE , no sé sobre mysql) probablemente encontrará que necesita indexar columnas que participan en WHERE y JOIN , no los que forman el conjunto de resultados.