计算列日期范围内每个日期出现的行数
我有一个包含如下数据的表
Group Start Date End Date
A 01/01/01 01/03/01
A 01/01/01 01/02/01
A 01/03/01 01/04/01
B 01/01/01 01/01/01
ETC
我希望生成一个给出每天计数的视图,就像这样
Group Date Count
A 01/01/01 2
A 01/02/01 2
A 01/03/01 2
A 01/04/01 1
B 01/01/01 1
我正在使用 Oracle 9 并且完全不知道如何处理这个问题并且正在寻找有什么想法可以让我开始。
注意:生成一个表格来保存日期是不切实际的,因为我的最终产品必须细分到分钟。
I have a table with data such as below
Group Start Date End Date
A 01/01/01 01/03/01
A 01/01/01 01/02/01
A 01/03/01 01/04/01
B 01/01/01 01/01/01
ETC
I am looking to produce a view that gives a count for each day, like this
Group Date Count
A 01/01/01 2
A 01/02/01 2
A 01/03/01 2
A 01/04/01 1
B 01/01/01 1
I am using Oracle 9 and am at a total loss on what how to handle this and am looking for any idea to get me started.
Note: Generating a table to hold the dates is not practical because I final product has to break down to the minute.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
更新:
利用分析函数实现更好、更快的查询。
主要思想是,包含每个日期的范围数是在该日期之前开始的范围计数与在该日期之前结束的范围计数之间的差。
此查询在
1
秒内完成,针对1,000,000
行。有关更多详细信息,请参阅我的博客中的此条目:
Oracle
:生成日期列表以及每个日期的计数范围Update:
A better and faster query making use of analytic functions.
The main idea is that the number of ranges containing each date is the difference before the count of ranges started before that date and the count of ranges that ended before it.
This query completes in
1
second on1,000,000
rows.See this entry in my blog for more detail:
Oracle
: generating a list of dates and counting ranges for each date您可以使用这些SO中描述的方法:
基本上:与生成的日历连接并按列子集进行分组。
You could use the method described in these SO:
Basically: join with a generated calendar and GROUP BY your subset of columns.
通常我用数字表来解决此类问题:
Typically I solve this kind of problem with a numbers table: