Не виждам защо трябва да имате нужда от синтетичния ключ, така че вместо това ще използвам тази таблица:
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'
;
аритметичният синтаксис на датата вероятно е грешен, но разбирате идеята
вижте по-горе, добавете ORDER BY curr.weight - prev.weight DESC
и LIMIT N
за последните два въпроса:не спекулирайте, разгледайте плановете за изпълнение. (postgresql има EXPLAIN ANALYZE
, не знам за mysql) вероятно ще откриете, че трябва да индексирате колони, които участват в WHERE
и JOIN
, а не тези, които формират набора от резултати.