Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

design de tabela + pergunta SQL


Não vejo por que você precisa da chave sintética, então usarei esta tabela:
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'
;

a sintaxe aritmética de data provavelmente está errada, mas você entendeu

veja acima, adicione ORDER BY curr.weight - prev.weight DESC e LIMIT N

para as duas últimas perguntas:não especule, examine os planos de execução. (postgresql tem EXPLAIN ANALYZE , não sei sobre mysql) você provavelmente achará que precisa indexar colunas que participam de WHERE e JOIN , não os que formam o conjunto de resultados.