我们使用的产品将不同年份的相同数据存储在不同的表中,即Test2015Test2016等。不幸的是,我无法影响数据的存储方式。
我现在有一个工作查询,它从表中提取列,并将数据合并到一个数据源中(见下面的psuedocode),以便跨年进行更轻松的分析。
目前我只有几年的数据,但随着时间的推移,我们将积累更多的数据。有没有什么简单的方法可以迭代这种类型的查询而不必重复代码行?
干杯,
约纳森

WITH
  2015data AS (SELECT Name, Score, Year FROM Test2015),
  2016data AS (SELECT Name, Score, Year FROM Test2016)

SELECT * FROM 2015data

UNION ALL

SELECT * FROM 2016data

最佳答案

不,没有一种简单的方法可以使它自动化。但是,当您说“将数据合并到一个数据源”时,您的意思是创建一个视图吗?如果是这样,那么您只需要每年更新一次视图以包含新表。如果没有,我建议你这样做:

CREATE VIEW TestAll AS
  SELECT * FROM (SELECT Name, Score, Year FROM Test2015) 2015data
  UNION ALL
  SELECT * FROM (SELECT Name, Score, Year FROM Test2016) 2016data;
  -- Add more years as the tables are created

不理想,也不难保养。
在您的分析中,现在只需使用TestAll视图,例如:
SELECT Name, avg(Score)
FROM TestAll
WHERE Year < date_trunc('year', CURRENT_DATE) - 2
GROUP BY Name;

关于postgresql - Postgres-在多个表上重复选择并加入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32641606/

10-11 22:14
查看更多