Bat*_*son 1 postgresql date range
这个可能比我做的简单得多.我必须查询具有这样的基本布局的表
(productNumber varchar, firstYearAvailable int, lastYearAvailable int, ...)
Run Code Online (Sandbox Code Playgroud)
例如
(12345, 2004, 2006, ...),
(22293b, 2009, 2011, ...),
(a7564n, 2007, 2010, ...),
etc.
Run Code Online (Sandbox Code Playgroud)
通过一系列复杂的连接,在与其他表一起的函数中查询此表.截至目前,查询是这样的
SELECT field1, field2, productNumber, firstYearAvailable, lastYearAvailable, ...
FROM ...
JOIN ...
WHERE ...
etc.
Run Code Online (Sandbox Code Playgroud)
不是每个产品(第一年 - 去年)返回年份范围,而是为每个产品返回每年的条目(firstYear,firstYear + 1,...,lastYear)会更有用.例如,假设产品编号是12345,该产品的范围是2004-2006,那么查询应该返回该产品和那两列.
(12345,2004),
(12345,2005),
(12345,2006)
Run Code Online (Sandbox Code Playgroud)
还有一个细节使得此查询特别困难,查询搜索多个部件号,并且每个部件号可能具有不同的年份范围.
有没有人有关于如何解决这个问题的任何提示?我愚弄了循环和连接,并通过条件动态生成SQL语句,但这些都没有效果.
希望我提供了足够的信息,但如果我没有,请问.
谢谢
函数generate_series(start int,stop int)是你的答案:
create temporary table product_years
(productNumber varchar, firstYearAvailable int, lastYearAvailable int);
insert into product_years values
('12345', 2004, 2006),
('22293b', 2009, 2011),
('a7564n', 2007, 2010);
select
productNumber,
generate_series(firstYearAvailable,lastYearAvailable) as productYear
from product_years;
Run Code Online (Sandbox Code Playgroud)
__PRE__
| 归档时间: |
|
| 查看次数: |
749 次 |
| 最近记录: |