Sql t日期
从这里开始,我将实际数据分组到每个日期桶中,将价格相加并除以10。如果你有遗漏的日期,应该说明原因。如果您在同一天有副本。。。好吧,然后它会人为地膨胀你的“平均值”。如果你定义了一个关于如何处理被骗者的规则,那就很容易管理了。这是一个相当残酷的力量,我敢打赌一美元,由于>和<在连接中,它的效率非常低,但从概念上讲,它听起来像你想要做的:Sql t日期,sql,postgresql,Sql,Postgresql,从这里开始,我将实际数据分组到每个日期桶中,将价格相加并除以10。如果你有遗漏的日期,应该说明原因。如果您在同一天有副本。。。好吧,然后它会人为地膨胀你的“平均值”。如果你定义了一个关于如何处理被骗者的规则,那就很容易管理了。这是一个相当残酷的力量,我敢打赌一美元,由于>和
with intervals as (
select start_date, start_date + interval '10 days' as end_date
from generate_series (
(select min (date) from price_data),
(select max (date) from price_data),
interval '10 days') gs (start_date)
)
select
i.start_date, sum (p.price) / 10 as average
from
price_data p
join intervals i on
p.date >= i.start_date and
p.date < i.end_date
group by
i.start_date
我不能保证这些是最好的方法,但它们是最好的方法
简言之,我将数据集中的最短日期和最长日期分为10天。这确实是以“每10天”的时钟从你的第一次约会开始为前提的
从这里开始,我将实际数据分组到每个日期桶中,将价格相加并除以10。如果你有遗漏的日期,应该说明原因。如果您在同一天有副本。。。好吧,然后它会人为地膨胀你的“平均值”。如果你定义了一个关于如何处理重复的规则,那就很容易管理了。这个怎么样?无论间隔如何,它都连续10天
CREATE TABLE date (
date DATE NOT NULL,
price DOUBLE PRECISION NOT NULL
);
INSERT INTO date (date, price)
SELECT (now()::DATE) + s.i,
s.i :: DOUBLE PRECISION
FROM generate_series(0, 1000) AS s(i);
SELECT ((extract(EPOCH FROM date) / (60 * 60 * 24)) :: BIGINT) / 10
, avg(price) AS average_price
FROM date
GROUP BY 1
ORDER BY 1;
这个怎么样?无论间隔如何,它都连续10天
CREATE TABLE date (
date DATE NOT NULL,
price DOUBLE PRECISION NOT NULL
);
INSERT INTO date (date, price)
SELECT (now()::DATE) + s.i,
s.i :: DOUBLE PRECISION
FROM generate_series(0, 1000) AS s(i);
SELECT ((extract(EPOCH FROM date) / (60 * 60 * 24)) :: BIGINT) / 10
, avg(price) AS average_price
FROM date
GROUP BY 1
ORDER BY 1;
如果有间隔或重复的天数怎么办?如果有间隔或重复的天数怎么办?
with intervals as (
select
start_date::date as start_date,
(start_date + interval '10 days')::date as end_date
from generate_series (
(select min (date) from price_data),
(select max (date) from price_data),
interval '10 days') gs (start_date)
),
exploded_intervals as (
select
start_date + i as snapshot_date, start_date, end_date
from
intervals i
cross join generate_series (0, 9) gs (i)
)
select
i.start_date, sum (p.price) / 10 as average
from
price_data p
join exploded_intervals i on
p.date = i.snapshot_date
group by
i.start_date
CREATE TABLE date (
date DATE NOT NULL,
price DOUBLE PRECISION NOT NULL
);
INSERT INTO date (date, price)
SELECT (now()::DATE) + s.i,
s.i :: DOUBLE PRECISION
FROM generate_series(0, 1000) AS s(i);
SELECT ((extract(EPOCH FROM date) / (60 * 60 * 24)) :: BIGINT) / 10
, avg(price) AS average_price
FROM date
GROUP BY 1
ORDER BY 1;