KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I need an SQL guru to help me speed up my query. I have 2 tables, quantities and prices. quantities records a quantity value between 2 timestamps, 15 minutes apart. prices records a price for a given timestamp, for a given price type and there is a price 5 record for every 5 minutes. I need 2 work out the total price for each period, e.g. hour or day, between two timestamps. This is calculated by the sum of the (quantity multiplied by the average of the 3 prices in the 15 minute quantity window) in each period. For example, let's say I want to see the total price each hour for 1 day. The total price value in each row in the result set is the sum of the total prices for each of the four 15 minute periods in that hour. And the total price for each 15 minute period is calculated by multiplying the quantity value in that period by the average of the 3 prices (one for each 5 minutes) in that quantity's period. Here's the query I'm using, and the results: SELECT MIN( `quantities`.`start_timestamp` ) AS `start`, MAX( `quantities`.`end_timestamp` ) AS `end`, SUM( `quantities`.`quantity` * ( SELECT AVG( `prices`.`price` ) FROM `prices` WHERE `prices`.`timestamp` >= `quantities`.`start_timestamp` AND `prices`.`timestamp` < `quantities`.`end_timestamp` AND `prices`.`type_id` = 1 ) ) AS total FROM `quantities` WHERE `quantities`.`start_timestamp` >= '2010-07-01 00:00:00' AND `quantities`.`start_timestamp` < '2010-07-02 00:00:00' GROUP BY HOUR( `quantities`.`start_timestamp` ); +---------------------+---------------------+----------+ | start | end | total | +---------------------+---------------------+----------+ | 2010-07-01 00:00:00 | 2010-07-01 01:00:00 | 0.677733 | | 2010-07-01 01:00:00 | 2010-07-01 02:00:00 | 0.749133 | | 2010-07-01 02:00:00 | 2010-07-01 03:00:00 | 0.835467 | | 2010-07-01 03:00:00 | 2010-07-01 04:00:00 | 0.692233 | | 2010-07-01 04:00:00 | 2010-07-01 0
Tags (comma-separated)
Save Edits
Cancel