如何从代表较大间隔的表中创建代表较小间隔的子表?

时间:2019-04-18 08:27:44

标签: postgresql

我有一张表格,其中两列代表一个间隔:

表A:

-------------------
| id | from | to  |
-------------------
|  1 | 9.0  | 8.6 |
|  2 | 3.0  | 2.0 |

使用表A,我想创建以下表:

表B:

---------------------
| id_a | from | to  |
---------------------
|    1 | 9.0  | 8.8 |
|    1 | 8.8  | 8.6 |
|    2 | 3.0  | 2.8 |
|    2 | 2.8  | 2.6 |
|    2 | 2.6  | 2.4 |
|    2 | 2.4  | 2.2 |
|    2 | 2.2  | 2.0 |

似乎有一个generate_series函数,但它仅适用于整数和日期。我还尝试使用数字参数创建generate_series的变体,但是它无法按预期工作。

如何查询表A,以便可以输出表B?

2 个答案:

答案 0 :(得分:1)

引用@BasilEricRabi的解决方案:

demo:db<>fiddle

如果将generate_series放入FROM列表中,则无需执行两次:

SELECT 
    id,
    gs,
    gs - 0.2
FROM 
    intervals,
    generate_series("from", "to" + 0.2, -0.2) gs


免责声明 from to 是PostgreSQL中的受限关键字。因此,强烈建议选择其他列名称!

答案 1 :(得分:0)

愚蠢的我!谢谢@a_horse_with_no_name的指导。最近刚刚开始使用postgresql。解决方案是如此简单。

SELECT id as id_a,
       generate_series(from, to + 0.2, -0.2) as from,
       generate_series(from - 0.2, to, -0.2) as to
FROM table_a ;