gpt4 book ai didi

postgresql - 扩展 Postgresql 列中的日期范围

转载 作者:行者123 更新时间:2023-11-29 12:31:43 25 4
gpt4 key购买 nike

这个可能比我做的要简单得多。我必须查询具有这样基本布局的表

(productNumber varchar, firstYearAvailable int, lastYearAvailable int, ...)

例如

(12345, 2004, 2006, ...),
(22293b, 2009, 2011, ...),
(a7564n, 2007, 2010, ...),
etc.

此表通过一系列复杂的连接在函数中与其他表一起查询。到目前为止,查询是这样的

SELECT field1, field2, productNumber, firstYearAvailable, lastYearAvailable, ...
FROM ...
JOIN ...
WHERE ...
etc.

与其为每个产品返回年份范围(第一年 - 去年),不如为每个产品返回每年的条目(firstYear,firstYear + 1,...,lastYear)对我更有用.例如,假设产品编号为 12345,该产品的范围为 2004-2006,则查询应返回该产品和这两列。

(12345,2004),
(12345,2005),
(12345,2006)

还有一个细节使得这个查询特别困难,查询搜索多个零件号,每个零件号可能有不同的年份范围。

有没有人对如何解决这个问题有任何建议?我玩过循环和连接并通过条件动态生成 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;

 productnumber | productyear---------------+------------- 12345         |        2004 12345         |        2005 12345         |        2006 22293b        |        2009 22293b        |        2010 22293b        |        2011 a7564n        |        2007 a7564n        |        2008 a7564n        |        2009 a7564n        |        2010(10 rows)

关于postgresql - 扩展 Postgresql 列中的日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9607946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com