我正在提取结果,有些人共享一个 ID。例如,ID# 3 有 4 行,唯一的区别是日期和金额。我想检查从我加入的另一个表中获得的两个日期,并获取两个日期之间的值的总和。
例如:
身份证 | 价值 | 日期 |
---|---|---|
ID#1 | 60 | 2008年8月19日 |
ID#2 | 300 | 2001年4月10日 |
ID#3 | 100 | 1990年1月5日 |
ID#3 | 200 | 1990年1月6日 |
ID#3 | 150 | 1990年1月7日 |
ID#3 | 175 | 1990年1月8日 |
理想情况下,我想获得从 01/05/1990 到 ID#3 01/07/1990 的 ID#3 的总和。总和将为 450。最终结果应该是每个 ID# 的一行以及另一个表提供的日期范围内的值的一个总和。我认为 where 语句在这里不起作用,因为日期变化很大。有没有办法将其放在案例陈述中?还是子查询更好?
例如,这有什么问题?
select V.Id
, sum(V.Value)
, D.Begin
, D.End
from ValueTable V
inner join DateTable D on D.ValueId = V.Id
and D.Begin <= V.Date
and D.End >= V.Date
group by V.Id, D.Begin, D.End