如何解决SQL-根据上次日期计算新条目
ID ReportDate Object_id
我需要知道的是新计数和旧计数(对象ID)
例如:如果我有以下数据:
我希望将以下输出按ReportDate
分组:
我想过一种使用基于日期的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 举报,一经查实,本站将立刻删除。