Sql 尝试循环查询以获取每月计数

Sql 尝试循环查询以获取每月计数,sql,oracle,Sql,Oracle,我需要得到每个包每月有效覆盖的员工人数。看50个月的跨度,所以不想运行50次。我需要在这些日期之间的每个月的最后一天携带每个包裹的人数 我肯定我可以写一个循环来检查每个日期,但我一辈子都搞不清楚 选择COUNT DISTINCT t.employee\u num ,t.PACKAGE 从第2页开始 其中,t.from_日期和t.to_日期之间的“&AS_OF” 分组 t、 包装 选择d.作为日期的日期, 福利计数不同的员工编号 从第2页开始 加入选择最后一天添加月FD,级别为截止日期 从中选择M

我需要得到每个包每月有效覆盖的员工人数。看50个月的跨度,所以不想运行50次。我需要在这些日期之间的每个月的最后一天携带每个包裹的人数

我肯定我可以写一个循环来检查每个日期,但我一辈子都搞不清楚

选择COUNT DISTINCT t.employee\u num ,t.PACKAGE 从第2页开始 其中,t.from_日期和t.to_日期之间的“&AS_OF” 分组 t、 包装 选择d.作为日期的日期, 福利计数不同的员工编号 从第2页开始 加入选择最后一天添加月FD,级别为截止日期 从中选择MINfrom_date作为fd,MAXto_date作为td 从表2开始 在最后一天和最后一个月之前连接 D.从日期到日期之间的日期 按日期、包装的d.as\U分组 您可以使用connect by语法为适当的范围生成每个月的一系列最后几天,然后根据不同的员工编号进行合并:

SELECT   as_of_date, package, COUNT(DISTINCT employee_num)
FROM     ttable2 t
JOIN     (SELECT     LAST_DAY(ADD_MONTH(fd, LEVEL)) AS as_of_date
          FROM       (SELECT MIN(from_date) AS fd, MAX(to_date) AS td
                      FROM   ttable2)
          CONNECT BY LAST_DAY(ADD_MONTH(fd, LEVEL)) < td) d ON 
         s.as_of_date BETWEEN t.from_date AND t.to_date
GROUP BY as_of_date, pacakge
选择d.作为日期的日期, 福利计数不同的员工编号 从第2页开始 加入选择最后一天添加月FD,级别为截止日期 从中选择MINfrom_date作为fd,MAXto_date作为td 从表2开始 在最后一天和最后一个月之前连接 D.从日期到日期之间的日期 按日期、包装的d.as\U分组 您可以使用connect by语法为适当的范围生成每个月的一系列最后几天,然后根据不同的员工编号进行合并:

SELECT   as_of_date, package, COUNT(DISTINCT employee_num)
FROM     ttable2 t
JOIN     (SELECT     LAST_DAY(ADD_MONTH(fd, LEVEL)) AS as_of_date
          FROM       (SELECT MIN(from_date) AS fd, MAX(to_date) AS td
                      FROM   ttable2)
          CONNECT BY LAST_DAY(ADD_MONTH(fd, LEVEL)) < td) d ON 
         s.as_of_date BETWEEN t.from_date AND t.to_date
GROUP BY as_of_date, pacakge

“开始日期”和“结束日期”是否始终分别是日历月的第一天和最后一天?另外,你需要看哪个50个月的窗口期?是否预先给出,硬编码?它是用户输入吗?或者它是从最近一个月末开始测量的,比如用SYSDATE来测量?from_日期和TO_日期是否总是一个日历月的第一天,分别是最后一天?另外,你需要看哪个50个月的窗口期?是否预先给出,硬编码?它是用户输入吗?或者它是从最近一个月末开始测量的,比如用SYSDATE来测量?