我的标题很混乱,但我没有其他方式来描述它。
我有一个视图,根据某些标准为我提供一行。使用此视图,我想过滤另一个表,该表的记录日期必须等于或大于视图中的值。之后,我需要对该表的所有记录求和并减去视图中的一列。
一个例子:
查看
==========================
Item | Value | LastDate
==========================
A 10 2017-02-01
B 5 2017-02-03
C 0 NULL
--------------------------
记录表:
==========================
Item | Value | Date
==========================
A 20 2017-01-01
A -5 2017-02-04
A 5 2017-02-03
A 10 2017-02-04
B 5 2017-01-01
B 5 2017-02-21
B 5 2017-02-22
B 10 2017-02-23
--------------------------
想要的结果
=======================================
Item | Value | LastDate | RecordsSum
=======================================
A 10 2017-02-01 10
B 5 2017-02-03 20
C 0 NULL NULL
---------------------------------------
我尝试使用Fabiano's方法,但是当我只想要总和时,我将记录表数据连接起来。
我可以使用另一个视图来计算值并将其连接到第一个视图,但是这种方法会对数据库进行两次查询,从而使其效率低下,因为它将针对 >1000k 记录运行。
我知道我可能需要使用 CTE,但我无法让它发挥作用。
预先感谢您的帮助。
像这样怎么样?
select v.Item
, v.Value
, v.LastDate
, SUM(r.Value) as RecordsSum
from View v
join Record r on r.Item = v.Item
and r.Date > v.LastDate
group by v.Item
, v.Value
, v.LastDate
看来您只需要在视图的所有列上附加一列:
SELECT Item, Value, [Date],
(SELECT SUM(Value)
FROM MyTable
WHERE MyTable.Item = MyView.Item
AND MyTable.Date > MyView.Date) AS RecordsSum
FROM MyView