Hi
I have two tables. Tick table has fields like ticker, time, price & volume and Timeseries table has fields like ticker, time, avg_price, avg_volume.
The time field in Timeseries table is different from time in tick table, its the timeseries for every minute. Now I want to calculate the average price & volume from tick table for each ticker and for every minute and add those fields to timeseries table. Can anyone please help me out with the sql query.
Note: The ticker in the tick table also has duplicate values, so i am not able to create relation between two tables.
Will this help:
select
ticker,
date_trunc('minute', time),
ave(price),
ave(volume)
from tick
group by
ticker,
date_trunc('minute', time)
You say you want to "add" these values to the Timeseries table? You mean insert them? If so do this:
insert into timeseries (
ticker, time, avg_price, avg_volume
)
select
ticker,
date_trunc('minute', time),
ave(price),
ave(volume)
from tick
group by
ticker,
date_trunc('minute', time)
Of course if you do this repeatedly, you will start gathering duplicates in the timeseries so you may want to do one insert and one update:
insert into timeseries (
ticker, time, avg_price, avg_volume
)
select
tick.ticker,
date_trunc('minute', tick.time),
ave(tick.price),
ave(tick.volume)
from tick
left outer join timeseries on (
-- Not sure your join since you said time is not the same between ticke and timeseries
date_trunc('minute', tick.time) = timeseries.tick
and tick.ticker = timeseries.ticker
)
group by
ticker,
date_trunc('minute', time)
... I will leave the update as an exercise ;)