SQL统计记录以前出现的次数

SQL统计记录以前出现的次数,sql,oracle,Sql,Oracle,我有一个包含report_date和job_no列的表,我想知道如何返回一个列,显示job_no在当前事件之前出现了多少次 我尝试过countjob\u no,但我不知道如何将其设置为仅统计当前报告日期之前的事件 到目前为止,我不得不将数据导出到excel中,并对报告日期

我有一个包含report_date和job_no列的表,我想知道如何返回一个列,显示job_no在当前事件之前出现了多少次

我尝试过countjob\u no,但我不知道如何将其设置为仅统计当前报告日期之前的事件

到目前为止,我不得不将数据导出到excel中,并对报告日期
请帮忙

您需要的是一个相关的子查询:

SELECT s.job_no,(select count(*) from YourTable t
               where t.report_date < s.report_date and t.job_no = s.job_no)
FROM YourTable s

这样,对于每个作业,相关查询将计算在当前行日期之前出现的次数。

您需要的是相关子查询:

SELECT s.job_no,(select count(*) from YourTable t
               where t.report_date < s.report_date and t.job_no = s.job_no)
FROM YourTable s

这样,对于每个作业,相关查询将统计在当前行日期之前出现的次数。

只需使用累积计数:

select t.job_no, t.report_date,
       count(*) over (partition by t.job_no order by t.report_date) as cumecnt
from t;

严格地说,这包括当前日期,因此您可能希望在以前的列表中减去1,或者使用更复杂的窗口子句。

只需使用累积计数:

select t.job_no, t.report_date,
       count(*) over (partition by t.job_no order by t.report_date) as cumecnt
from t;

严格地说,这包括当前日期,因此您可能希望在以前的列表中减去1,或者使用更复杂的窗口子句。

分析计数可能会满足您的要求:

select job_no
     , report_date
     , count(*) over (partition by job_no
                          order by report_date
                           rows between unbounded preceding and 1 preceding) cnt
  from your_table

此版本中的windowing子句将阻止对当前行进行计数,尽管在所述情况下,只需减去1,并在无界的前一行和当前行之间使用默认的行窗口将同样有效。

分析计数可能会执行您所需的操作:

select job_no
     , report_date
     , count(*) over (partition by job_no
                          order by report_date
                           rows between unbounded preceding and 1 preceding) cnt
  from your_table

此版本中的windowing子句将阻止计算当前行,尽管对于所述情况,只需减去1,并在无界的前一行和当前行之间使用默认的行窗口将同样有效。

我的印象是,您有一个固定的报告日期参数。换句话说,您的比较与报告本身中的任何数据都不相关

count(case when report_date < ?report_date then 1 else null end)
    over (partition by job_no)

我的印象是,您有一个固定的报告日期参数。换句话说,您的比较与报告本身中的任何数据都不相关

count(case when report_date < ?report_date then 1 else null end)
    over (partition by job_no)

在什么背景下。。。你是按什么排序的。你能发布你的尝试并提供更多信息吗?可能还有一些样本数据。请阅读,这里是一个很好的地方,在什么样的背景下。。。你是按什么排序的。你能发布你的尝试并提供更多信息吗?可能还有一些示例数据。请阅读,这里是一个很好的地方,在这种情况下,相关子查询将比适当的分析计数函数更昂贵。此站点用于回答OP请求的解决方案。你不能假设他有大量的数据,这对他来说是昂贵的,你也不能因为你认为你的答案更正确而否决一个正确的答案@Sentinelin在这种情况下,相关子查询将比适当的分析计数函数更昂贵。此站点用于回答OP请求的解决方案。你不能假设他有大量的数据,这对他来说是昂贵的,你也不能因为你认为你的答案更正确而否决一个正确的答案@哨兵