【发布时间】:2017-05-16 07:37:58
【问题描述】:
我有一张类似下一张的桌子:
+------------+---------+---------+---------+
| date | value 1 | value 2 | value 3 |
+------------+---------+---------+---------+
| 01/01/2017 | 263 | 7 | 222 |
| 02/01/2017 | 275 | -9 | 209 |
| 03/01/2017 | 331 | -9 | 243 |
| . | . | . | . |
| . | . | . | . |
| . | . | . | . |
+------------+---------+---------+---------+
我想在 postgres 中创建另一个:
+---------+---------------+------------+------------+
| | 01/01/2017 | 02/01/2017 | 03/01/2017 |
+---------+---------------+------------+------------+
| value 1 | 263 | 275 | 331 |
| value 2 | 7 | -9 | -9 |
| value 3 | 222 | 209 | 243 |
+---------+---------------+------------+------------+
但我的问题是我不知道我会有多少日期,所以我必须使用这样的东西:
SELECT * FROM crosstab(
$$ SELECT value1, date FROM myTable ORDER BY 1 $$,
$$ SELECT m FROM generate_series((select min(date) from myTable) ,(select max(date) from myTable), '1 month'::interval) m $$
) AS (
".." date, ".." date, ".." date, ".." date
);
有人可以帮助我吗?谢谢。
【问题讨论】:
-
I dont know how many dates I will have, 所以,如果你有 1000 个日期,那么你期望结果中有 1000 列? -
是的,但我永远不会有 1000 列,因为日期的最大数量为 12,一年中的每个月一个。在示例中,
dateformat将是 mm/dd/yyyy。
标签: sql postgresql crosstab