मुझे समझ नहीं आता कि आपको सिंथेटिक कुंजी की आवश्यकता क्यों है, इसलिए मैं इसके बजाय इस तालिका का उपयोग करूंगा:
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
, वे नहीं जो परिणाम सेट बनाते हैं।