我正在寻找一些一般性建议而不是解决方案。我的问题是我有一个每人的日期列表,由于行政程序,一个人可能为这一个实例存储了多个记录,但记录的日期是当这个人通过书面记录时输入数据的时间。我理解这很难解释,所以我举一个例子:
Person Date Audit
------ ---- -----
1 2000-01-01 A
1 2000-01-01 B
1 2000-01-02 C
1 2003-04-01 A
1 2003-04-03 A
我想知道一个人有多少有效记录,删除记录日期为数据输入日期的烦人审核,而不是人首次到达数据集的日期。所以对于上述人我只对以下内容感兴趣:
Person Date Audit
------ ---- -----
1 2000-01-01 A
1 2003-04-01 A
使这个问题变得困难的原因是我没有审计专栏(这里的审计专栏只是介绍如何收集数据)。我只是约会。因此,我可以粗略地计算真实事件(并删除重复的审计数据)的一种方法是查看一个人内的个别周。历史记录和如果某一周的记录存在,请将1添加到我的计数器。这种方式即使在几天内分割了多个记录,我只将日期的连续数统计为一条记录(毕竟我按日期计算)。
有没有人知道任何可以帮我解决这个问题的db2函数?
答案 0 :(得分:1)
如果你能活到标准周,那很简单:
select
person, year(dt), week(dt), min(dt), min(audit)
from
blah
group by
person, year(dt), week(dt)
如果您需要从第一个日期开始的七天范围,那么您需要生成自己的周数,一个日历,例如像这样:
with minmax(mindt, maxdt) as ( -- date range of the "calendar"
select min(dt), max(dt)
from blah
),
cal(dt,i) as ( -- fill the range with every date, count days
select mindt, 0
from minmax
union all
select dt+1 day , i+1
from cal
where dt < (select maxdt from minmax) and i < 100000
)
select
person, year(blah.dt), wk, min(blah.dt), min(audit)
from
(select dt, int(i/7)+1 as wk from cal) t -- generate week numbers
inner join
blah
on t.dt = blah.dt
group by person, year(blah.dt), wk