plsql按日期计数并汇总到日期

plsql按日期计数并汇总到日期,plsql,Plsql,我希望有一个plsql请求,它可以按日期计算行数和截至日期的行数之和 源代码如下(数百个日期): 结果是: date nb sum ------------------- 2019.05.01 2 2 2019.05.02 1 3 2019.05.03 3 6 . . . 上半年相对容易。差不多 SELECT date, count(*) from table GROUP BY date ORDER BY date; 但我不确定累计金额。如果这是一

我希望有一个plsql请求,它可以按日期计算行数和截至日期的行数之和

源代码如下(数百个日期):

结果是:

date        nb  sum
-------------------
2019.05.01  2   2
2019.05.02  1   3
2019.05.03  3   6
    . . . 

上半年相对容易。差不多

SELECT date, count(*) from table GROUP BY date ORDER BY date;

但我不确定累计金额。如果这是一个手动过程,那么我可能会直接导入Excel并在那里进行操作。

这里的关键是使用聚合函数作为分析函数,这就是下面查询中(
SUM(COUNT(dt))OVER(ORDER BY dt)
所做的

WITH dates AS
(
  SELECT to_date('2019.05.01', 'YYYY.MM.DD') AS dt FROM dual UNION ALL
  SELECT to_date('2019.05.01', 'YYYY.MM.DD') AS dt FROM dual UNION ALL
  SELECT to_date('2019.05.02', 'YYYY.MM.DD') AS dt FROM dual UNION ALL
  SELECT to_date('2019.05.03', 'YYYY.MM.DD') AS dt FROM dual UNION ALL
  SELECT to_date('2019.05.03', 'YYYY.MM.DD') AS dt FROM dual UNION ALL
  SELECT to_date('2019.05.03', 'YYYY.MM.DD') AS dt FROM dual
)

SELECT dt, COUNT(dt) AS nb, SUM(COUNT(dt)) OVER (ORDER BY dt) AS sum
FROM dates
GROUP BY dt
;

我会注意到我提供的答案是使用标准SQL。如果出于某种原因,您只需要在PL/SQL中完成此操作,请告诉我。在不了解PL/SQL最初被请求获取此数据的原因的情况下,我提供了获取请求输出的最简单方法。感谢您提供的解决方案,但我不知道日期列表(数百个)。您有通用解决方案吗?@user1753180我提供的解决方案适用于任何日期。。。CTE中的日期列表(带方框)只是根据您随问题提交的日期组成的日期。我的解决方案在哪些日期不起作用,也许我们可以从那里开始?我在CTE中提供的“虚假数据”中添加的任何日期都有效。同样,当我的解决方案失败时,请告诉我,我很乐意看一看。@user1753180同样,如果您在将我的解决方案应用于现有数据时遇到问题,我也可以提供帮助。也许这就是你遇到麻烦的地方?
WITH dates AS
(
  SELECT to_date('2019.05.01', 'YYYY.MM.DD') AS dt FROM dual UNION ALL
  SELECT to_date('2019.05.01', 'YYYY.MM.DD') AS dt FROM dual UNION ALL
  SELECT to_date('2019.05.02', 'YYYY.MM.DD') AS dt FROM dual UNION ALL
  SELECT to_date('2019.05.03', 'YYYY.MM.DD') AS dt FROM dual UNION ALL
  SELECT to_date('2019.05.03', 'YYYY.MM.DD') AS dt FROM dual UNION ALL
  SELECT to_date('2019.05.03', 'YYYY.MM.DD') AS dt FROM dual
)

SELECT dt, COUNT(dt) AS nb, SUM(COUNT(dt)) OVER (ORDER BY dt) AS sum
FROM dates
GROUP BY dt
;