gpt4 book ai didi

sql - 查询将提供两个日期范围之间的日期列表

转载 作者:行者123 更新时间:2023-12-04 23:57:35 24 4
gpt4 key购买 nike

我的问题类似于以下问题:

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:14582643282111

不同之处在于我的内部查询返回两条记录,而我有外部查询。

我需要编写类似这样的内部查询,它将为我提供两个日期范围之间的日期列表(我正在尝试不执行此查询)。

Select * from outerTable where  my_date in
(
select to_date(r.REQ_DATE) + rownum -1
from all_objects, (MY_INNER_QUERY Where ID =100) r
where rownum <= to_date(r.DUE_DATE,'dd-mon-yyyy')-to_date(r.REQ_DATE,'dd-mon-yyyy')+1;
)

我的内部查询返回以下 2 行:
Select * from innerTable Where ID =100


Start date end date
3/19/2013 3/21/2013
3/8/2013 3/8/2013

所以我需要内部查询,它将返回以下日期到外部查询:
    3/19/2013
3/20/2013
3/21/2013
3/8/2013

最佳答案

好问题——这个问题真的吸引了我!答案或多或少隐藏在汤姆的帖子中。这是简短版本,使用名为 TestDR 的表来定义范围。首先是TestDR内容:

SELECT * FROM TestDR;

STARTDATE ENDDATE
--------- ---------
19-MAR-13 21-MAR-13
08-MAR-13 08-MAR-13

现在让查询为范围中的每个日期创建一行:
WITH NUMS AS (
SELECT LEVEL-1 DaysToAdd
FROM DUAL
CONNECT BY LEVEL <= 60
)
SELECT StartDate + DaysToAdd TheDate
FROM TestDR
CROSS JOIN NUMS
WHERE TestDR.EndDate - TestDR.StartDate + 1 > DaysToAdd
ORDER BY 1

THEDATE
---------
08-MAR-13
19-MAR-13
20-MAR-13
21-MAR-13

使用根据 Tom 的帖子改编的查询,您必须知道“播种” NUMS 的最大范围。询问。他在他的例子中使用了 60,所以这就是我上面使用的。如果您认为子查询中的任何行都不会超过 60 天,那么这将起作用。如果您认为最大值可能高达 1000 天(大约三年),那么将 60 天更改为 1000 天。我尝试了这个并查询了 2 1/2 年的范围,结果是即时的。

如果您想指定确切的“种子”计数,如果您愿意使查询更复杂一些,则可以计算它。这是我如何用我的 TestDR 做到这一点 table :
WITH NUMS AS (
SELECT LEVEL-1 DaysToAdd
FROM DUAL
CONNECT BY LEVEL <= (
SELECT MAX(EndDate - StartDate + 1)
FROM TestDR)
)
SELECT ... and the rest of the query as above

关于sql - 查询将提供两个日期范围之间的日期列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15301716/

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