从每个日期的不同表中获取某些数据
Get certain data from different tables for each date
我有两个table
X 包含列 id、日期和计数
另一个 table 是 Y 列 id,code.
现在我想要上述形式的结果,这样在不同的列中应该有不同日期的代码、ID 和计数列,因此它应该看起来像这样
TABLE X
id date count
1 2016-08-16 20
1 2016-08-17 34
1 2016-08-18 56
1 2016-08-19 67
1 2016-08-20 87
TABLE Y
id code
1 101
2 102
3 103
4 104
5 105
RESULT
CODE ID 2016-08-16 2016-08-17 2016-08-18 2016-08-19 2016-08-20
101 1 20 34 56 67 87
获得类似结果的简单方法是
SELECT y.code, y.id, json_object_agg(x.date, x.count)
FROM x INNER JOIN y ON x.id = y.id GROUP BY y.id, y.code
如果你用另一种语言来处理查询结果,我觉得这个就够用了。
如果日期列需要是动态的,我认为PL/pgSQL是必要的。
DO $$
BEGIN
EXECUTE (SELECT format('CREATE TEMPORARY TABLE result AS
SELECT code, id, %s FROM (
SELECT y.code, y.id, json_object_agg(x.date, x.count) AS counts
FROM x INNER JOIN y ON x.id = y.id GROUP BY y.id, y.code) as sub',
string_agg(DISTINCT 'counts->>''' || date :: TEXT || ''' AS ' || '"' || date :: TEXT || '"', ',')
) FROM x);
END
$$ LANGUAGE plpgsql;
SELECT * FROM result;
我有两个table
X 包含列 id、日期和计数
另一个 table 是 Y 列 id,code.
现在我想要上述形式的结果,这样在不同的列中应该有不同日期的代码、ID 和计数列,因此它应该看起来像这样
TABLE X
id date count
1 2016-08-16 20
1 2016-08-17 34
1 2016-08-18 56
1 2016-08-19 67
1 2016-08-20 87
TABLE Y
id code
1 101
2 102
3 103
4 104
5 105
RESULT
CODE ID 2016-08-16 2016-08-17 2016-08-18 2016-08-19 2016-08-20
101 1 20 34 56 67 87
获得类似结果的简单方法是
SELECT y.code, y.id, json_object_agg(x.date, x.count) FROM x INNER JOIN y ON x.id = y.id GROUP BY y.id, y.code
如果你用另一种语言来处理查询结果,我觉得这个就够用了。
如果日期列需要是动态的,我认为PL/pgSQL是必要的。
DO $$ BEGIN EXECUTE (SELECT format('CREATE TEMPORARY TABLE result AS SELECT code, id, %s FROM ( SELECT y.code, y.id, json_object_agg(x.date, x.count) AS counts FROM x INNER JOIN y ON x.id = y.id GROUP BY y.id, y.code) as sub', string_agg(DISTINCT 'counts->>''' || date :: TEXT || ''' AS ' || '"' || date :: TEXT || '"', ',') ) FROM x); END $$ LANGUAGE plpgsql; SELECT * FROM result;