Ich bin auf der Suche nach einer Methodik, um den Unterschied zwischen 2 Zeilen in der gleichen Tabelle zu vergleichen. Von dem, was ich hier gefunden habe (How to get difference between two rows for a column field?) ist es fast das, was ich wollte. Ich habe den folgenden Code getan:sql compute Unterschied zwischen 2 Zeilen
create table #tmpTest
(
id_fund int null,
id_ShareType int null,
ValueDate datetime null,
VarNAV float null,
FundPerf float null,
)
insert into #tmpTest(id_fund, id_ShareType, ValueDate, VarNAV)
values(1,1,'20140101',100)
insert into #tmpTest(id_fund, id_ShareType, ValueDate, VarNAV)
values(1,1,'20140102',20)
update #tmpTest
set hrc.FundPerf = (isnull(hrn.VarNAV, 0) - hrc.VarNAV)/hrc.VarNAV
from #tmpTest hrc
left join #tmpTest hrn on hrn.ValueDate = (select min(ValueDate) from #tmpTest where ValueDate > hrc.ValueDate)
and hrc.id_fund = hrn.id_fund and hrc.id_ShareType = hrn.id_ShareType
Mein Problem ist, dass das Ergebnis, das ich bin beginnt auf der Linie 1 statt Linie 2.
Es folgt das Ergebnis der Berechnung Ich bin zu erhalten:
id_fund id_ShareType ValueDate VarNAV FundPerf
------- ------------ ------------------- ------- -----------------------------
1 1 2014-01-01 00:00:00 100 -0.8
1 1 2014-01-02 00:00:00 20 -1
während Ich mag würde es so sein:
id_fund id_ShareType ValueDate VarNAV FundPerf
------- ------------ ------------------- ------- -----------------------------
1 1 2014-01-01 00:00:00 100 -1
1 1 2014-01-02 00:00:00 20 -0.8
Was mit meinem Ansatz falsch?
Warum können Sie nicht verwenden 'LAG' und 'LEAD' Funktionen? – Kermit