Postgresql SQL中每个uuid的固定时间戳范围
我想生成一个表,其中包含最近n周的数据时间戳,在这种情况下,n=3和所有数据,即使它为空 我正在使用以下代码Postgresql SQL中每个uuid的固定时间戳范围,postgresql,Postgresql,我想生成一个表,其中包含最近n周的数据时间戳,在这种情况下,n=3和所有数据,即使它为空 我正在使用以下代码 with raw_weekly_data as (SELECT distinct d.uuid, date_trunc('week',a.start_timestamp) as tstamp, avg(price) as price FROM a join d on a.uuid = d.uuid where start_timestamp be
with raw_weekly_data as (SELECT
distinct d.uuid,
date_trunc('week',a.start_timestamp) as tstamp,
avg(price) as price
FROM
a join d on a.uuid = d.uuid
where start_timestamp between date_trunc('week',now()) - interval '3 week' and date_trunc('week',now())
group by 1,2,3
order by 1)
,tstamp as (SELECT
distinct tstamp
FROM
raw_weekly_data
)
SELECT
t.tstamp,
r.*
from raw_weekly_data r right join tstamp t on r.tstamp = t.tstamp
order by uuid
我想要这样的东西:
week | uuid | price
w1 | 1 | 10
w2 | 1 | 2
w3 | 1 |
w1 | 2 | 20
w2 | 2 |
w3 | 2 |
w1 | 3 | 10
w2 | 3 | 10
w3 | 3 | 20
但是没有显示所有的空结果。这里最好的方法是什么
week | uuid | price
w1 | 1 | 10
w2 | 1 | 2
w1 | 2 | 20
w1 | 3 | 10
w2 | 3 | 10
w3 | 3 | 20
形成所有周的笛卡尔乘积一个uuid,然后左加入实际平均值,每周价格,uuid。比如: 通过这种方式,您可以获得过去三周和UUID的所有组合,并通过平均价格进行扩展-如果该组合存在的话。
根据一些经过教育的猜测来填写缺失的信息。形成一个所有周的笛卡尔乘积和uuid,然后加入实际平均值、每周价格和uuid。比如: 通过这种方式,您可以获得过去三周和UUID的所有组合,并通过平均价格进行扩展-如果该组合存在的话。
根据一些经过教育的猜测来填充缺少的信息。也许您需要一个左连接d。为了确定这一点并为您提供一个有效的解决方案,我们希望您为表a和表D添加示例数据。您的问题应该从您的Postgres版本和表定义CREATE table语句开始。一些示例数据也会有所帮助。也许您需要一个左连接d。为了确定这一点并为您提供一个有效的解决方案,我们希望您为表a和表D添加示例数据。您的问题应该从您的Postgres版本和表定义CREATE table语句开始。一些样本数据也会有所帮助。
SELECT *
FROM generate_series (date_trunc('week', now() - interval '3 week')
, now() - interval '1 week'
, interval '1 week') tstamp
CROSS JOIN (SELECT DISTINCT uuid FROM a) a
LEFT JOIN (
SELECT d.uuid
, date_trunc('week', a.start_timestamp) AS tstamp
, avg(price) AS price -- d.price?
FROM a
JOIN d USING (uuid)
WHERE a.start_timestamp >= date_trunc('week',now()) - interval '3 week'
AND a.start_timestamp < date_trunc('week',now())
) ad USING (uuid, tstamp)
GROUP BY 1, 2
ORDER BY 1, 2