我有一张表Transactions
:
Date1 CardID AverageBalance TotalBalance
-----------------------------------------------------------
28-11-2013 12345 600 1200
27-11-2013 12345 100 200
26-11-2013 12345 200 400
25-11-2013 12345 300 400
从上表中我需要以这样一种方式获得输出,即2013年11月28日的平均余额大于前几天,即27,26& 11月25日和我取出过去2天平均值的方式是我计算接下来几天的总余额,不包括2014年11月28日,并检查平均值是否大于平均值的三倍;前一天的交易
SELECT AverageBalance
FROM Transactions (nolock)
WHERE CardId = '12345'
AND DATE1 = '2014-11-28 ') >
SELECT
(SELECT SUM(TotalBalance)
FROM Transactions (nolock)
WHERE CardId = '12345'
AND DATEDIFF(DAY, Date1, '2014-11-28') >= 1) * 3)
请告诉我如何获得所需的输出
答案 0 :(得分:1)
让我关注一下:" 2013年11月28日的平均余额大于前几天,即27,26& 11月25日和#34;否则,这个问题对我来说没有多大意义。
我无法判断您是否想要前两天或全天。在前两天,您将使用lag()
:
select t.*
from (select t.*,
lag(averagebalance) over (partition by cardid order by date) as ab1,
lag(averagebalance, 2) over (partition by cardid order by date) as ab2
from transactions t
) t
where t.averagebalance > ab1 and t.averageblance > ab2;