微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL-根据上次日期计算新条目

如何解决SQL-根据上次日期计算新条目

我有一个具有以下结构的表

ID  ReportDate  Object_id

我需要知道的是新计数和旧计数(对象ID)

例如:如果我有以下数据:

enter image description here

我希望将以下输出ReportDate分组:

enter image description here

我想过一种使用基于日期的Where子句的方法,但是我需要表中所有日期的数据。查看上一个报告中已经存在的计数以及该报告中的新增内容的计数。有任何想法吗?

编辑:新/旧定义-新将是在该报表运行日期之前从未出现过并出现在该报表上的记录,而旧的是在先前日期中至少具有一个匹配项的记录数。我将修改帖子以包含此信息。

解决方法

设法通过左联接来做到这一点。以下是我的解决方案,以防将来对任何人有帮助:)

SELECT table.ReportRunDate,-1*sum(table.ReportRunDate = new_table.init_date) as count_new,-1*sum(table.ReportRunDate <> new_table.init_date) as count_old,count(*) as count_total


FROM table LEFT JOIN 
((SELECT Object_ID,min(ReportRunDate) as init_date
FROM table
GROUP By OBJECT_ID) as new_table)
ON table.Object_ID = new_table.Object_ID

GROUP BY ReportRunDate
,

这在Oracle中有效,不确定ms-access:

SELECT ReportDate,COUNT(CASE WHEN rnk = 1 THEN 1 ELSE NULL END) count_of_new,COUNT(CASE WHEN rnk <> 1 THEN 1 ELSE NULL END)count_of_old
FROM (SELECT ID,ReportDate,Object_id,RANK() OVER (PARTITION BY Object_id ORDER BY ReportDate) rnk
        FROM table_name)
GROUP BY ReportDate

内部查询应基于ReportDate对每个出现的object_id进行排名,因此,某些object_id的第一次出现将具有rank = 1,下一个排名= 2,依此类推。 然后,外部查询会计算每个组中有多少个排名等于/不等于1的记录。

我假设1个object_id在每个reportDate中只能出现一次。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。