Pytanie : Modyfikować SQL SP początkowy Początek Wartość

I używać the 2 SP 2 Wartość od stół, i od the różnica, opracowywać koszt etc…

The problem I mieć być że jeżeli the HistorianDB.TLData DANE kolumna zaczynać od Zero, the pierwszy wartość wracać the SP być bardzo high.

For przykład, the TLData stół być wyróbka dane od dane drwal każdy 15mins. Jeżeli the pierwszy wartość na the Dane kolumna być 2000, then the wartość wzrastać 10 jednostka każdy 15min próbka. Wszystkie próbka pokazywać staranny linia na the mapa 10. , The pierwszy datapoint na the Mapa pokazywać ogromny kolec 2000, gdy ono widzieć the początkowy początek 2000, gdy zmiana od Nieobowiązujący (lub (0)), 2000.

So, ) I potrzebować być the SP, tak, że ono zawsze ignorować the pierwszy porównanie od Nieobowiązujący (lub (0) i i), the pierwszy rząd, i tylko porównywać Ro1 i row2.

Hope i robić sense.
(1):
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
USE [EnergySuiteDB]
IŚĆ
/****** Przedmiot:  StoredProcedure [dbo]. [GetCostPerPeriod] Pismo Data: 07/09/2010 15:32: 24 ******/
SET ANSI_NULLS DALEJ
IŚĆ
USTAWIAĆ QUOTED_IDENTIFIER DALEJ
IŚĆ
ZMIENIAĆ PROCEDURA [dbo]. [GetCostPerPeriod] @sDate DATETIME, @Meter varchar (50), @GasRate int, @pf pławik, @util varchar (50), @reportselection char (1), @co2 pławik, @Carbon pławik


ZACZYNAĆ

--Władza czynnik (0) rzucać wyjątek, więc (0) potrzeba brać opieka
jeżeli isnull (@pf, (0)) =0 ustalony @pf = (1)

-- oznajmiać i tworzyć niektóre zmienna opierać się na przybywający parametr

OZNAJMIAĆ @PREVVAL NUMERYK (12, 4)
oznajmiać @grate numeryk (12,4)
oznajmiać @edate datetime
oznajmiać @intervals int

ustawiać @sdate = konwertyta (char (8), @sdate, 112)   -- upewniać się czas być przy "początek" okres
Jeżeli @reportselection = "M" set @sdate = DATEADD (miesiąc, DATEDIFF (miesiąc, (0), @sdate), (0))
Jeżeli @reportselection = "Y" set @sdate = datename (rok, @sdate) + "0101"

ustawiać @edate = konwertyta (char (8), @sdate, 112) + "23:59: 59.997"
Jeżeli @reportselection = "W" set @edate = konwertyta (char (8), @sdate+6,112) + "23:59: 59.997"
Jeżeli @reportselection = "M" set @edate = DATEADD (miesiąc, DATEDIFF (miesiąc, -1, @sdate), (0)) - 0.00000005
Jeżeli @reportselection = "Y" set @edate = datename (rok, @sdate) + "1231 23:59: 59.997"

ustawiać @intervals = dzień (dateadd (miesiąc, datediff (miesiąc, - (1), @sdate), (0)) - 1) 
Jeżeli @reportselection = "D" set @intervals = @intervals * 96  -- 96 kwartalny godzina w dzień.
Jeżeli @reportselection = "Y" set @intervals = (1)

jeżeli isnull (@gasrate, (0)) = (1)
   ustawiać @grate = 11.0786 -- 1.02264 * 39/3.6
inny
   ustawiać @grate = 1.0

-- teraz tworzyć nasz zastępca raport dane ekstrakt od główny historia stół

JEŻELI OBJECT_ID ("tempdb. #REPORTDATA", "U ") BYĆ NIEOBOWIĄZUJĄCY KROPLA STÓŁ #REPORTDATA  -- musieć potrzebować
 
TWORZYĆ STOŁOWY #REPORTDATA
(
    ID int tożsamość początkowy klucz,
    TimeStamp DATETIME,
    Hundredths INT,      
    Dane NUMERYK (12, 4),
    DataChange NUMERYK (12, 4),
    DateStamp datetime
)

-- zaludniać nasz raportowy dane

WSZYWKA W #ReportData (Timestamp, Hundredths, Dane, Datestamp)
WYBRANY Timestamp, Hundredths, konwertyta (real, Dane) * @grate, skrzynka gdy @reportselection = "Y" wtedy konwertyta (char (6), timestamp, 112) + ' 01 ' inny konwertyta (char (8), timestamp, 112) końcówka
OD HistorianDB.dbo.TLData 
DOKĄD TLInstance = @Meter 
I timestamp między @sdate i @edate
I Type=0 
I isnumeric (dane) =1
ROZKAZ Timestamp, recordnumber        

-- teraz przygotowywać nasz dane the różnica między metrowy czytanie, ale my potrzebować baza wypadowa…

USTALONY @PrevVal = isnull ((WYBRANY wierzchołek (1) konwertyta (real, Dane) * @grate
                        OD HistorianDB.dbo.TLData 
                        DOKĄD TLInstance = @Meter 
                        I timestamp < @sdate
                        I Type=0 
                        I isnumeric (dane) =1 
                        ROZKAZ Timestamp desc), (0))

-- robić the aktualizacja nasz dane the różnica między metrowy czytanie i koszt

AKTUALIZOWAĆ #reportdata
USTAWIAĆ DataChange = #reportdata. Dane - isnull (prev.data, @prevval)
OD #ReportData 
lewy zewnętrzny łączyć #reportdata prev na #reportdata.id - (1) = prev.id

-- teraz my móc the raport

; Z Okres
(
   Wybrany skrzynka gdy @reportselection = "D" wtedy dateadd (minuta, liczba * 15, @sdate) inny skrzynka gdy @reportselection = "Y" wtedy dateadd (miesiąc, liczba, @sdate) inny dateadd (dzień, liczba, @sdate) końcówka końcówka jako PSDate 
   , skrzynka gdy @reportselection = "D" wtedy dateadd (minuta, liczba * 15 + 15, @sdate) - 0.00000005 inny skrzynka gdy @reportselection = "Y" wtedy DATEADD (miesiąc, DATEDIFF (miesiąc, -1, dateadd (miesiąc, liczba, @sdate)), (0)) - 0.00000005 inny konwertyta (char (8), @sdate+number, 112) + "23:59: 59.997" końcówka końcówka 59.997 
   , skrzynka gdy @reportselection = "D" wtedy opuszczać (datename (dw, @sdate), 03) +''+ konwertyta (char (8), @sdate, 03) +right (konwertyta (char (19), dateadd (minuta, liczba * 15, @sdate), 100), 8) inny skrzynka gdy @reportselection = "Y" wtedy opuszczać (datename (miesiąc, dateadd (miesiąc, liczba, @sdate)), 3) + '' + datename (rok, @sdate) inny lewica (datename (dw, dateadd (dzień, liczba, @sdate)), 3) + '' + konwertyta (char (8), dateadd (dzień, liczba, @sdate), 03) końcówka końcówka jako PSName 
   , skrzynka gdy @reportselection = "D" wtedy 1.0/96.0 inny skrzynka gdy @reportselection w ("M", "W ") wtedy 1.0 inny dzień (dateadd (miesiąc, number+datediff (miesiąc, -1, @sdate), (0)) - 1) końcówka końcówka jako dayparts
   od mistrz. .spt_values n z (nolock) 
   dokąd typ = "p"
   i skrzynka gdy @reportselection = "D" wtedy dateadd (minuta, liczba * 15, @sdate) inny skrzynka gdy @reportselection = "Y" wtedy dateadd (miesiąc, liczba, @sdate) inny dateadd (dzień, liczba, @sdate) końcówka końcówka < @edate
)
WYBIÓRKA 
    PSname jako Data,
    SUMA (isnull (r1.datachange, (0))) JAKO day_data,
    SUMA (isnull (r1.datachange, (0)))*@CO2 JAKO CO2_data,
    SUMA (isnull (r1.datachange, (0)))*@Carbon JAKO Carbon_data,
    SUMA (isnull (r1.datachange, (0)) *chargerate) JAKO DataCost,
    SUMA (isnull (r1.datachange, (0)) *levy) jako TotalLevy,
    totalCap (skrzynka gdy r1.datestamp być nieobowiązujący wtedy (0) inny caprate końcówka)/@intervals jako TotalCap,                           
    chargeCap (skrzynka gdy r1.datestamp być nieobowiązujący wtedy (0) inny chargecap końcówka) jako ChargeCap,
    standingDayCharge (skrzynka gdy r1.datestamp być nieobowiązujący wtedy (0) inny dayparts * StandingDayCharge końcówka) jako StandingDayCharge,
    końcówka (skrzynka gdy r1.datestamp być nieobowiązujący wtedy (0) inny dayparts * StandingDayCharge końcówka) 
    + SUMA (isnull (r1.datachange, (0)) * (chargerate + pobór)) 
    + totalCost (skrzynka gdy r1.datestamp być nieobowiązujący wtedy (0) inny caprate końcówka)/@intervals jako TotalCost,
    isnull (((skrzynka gdy @reportselection = "D" wtedy SUMA (isnull (r1.datachange, (0))) inny (wybrany wierzchołek (1) datachange od #reportdata r2 dokąd r2.datestamp = r1.datestamp rozkaz r2.datachange desc) końcówka) *4)/@pf, (0)) jako MaxkVA,
    isnull (((skrzynka gdy @reportselection = "D" wtedy SUMA (isnull (r1.datachange, (0))) inny (wybrany wierzchołek (1) datachange od #reportdata r2 dokąd r2.datestamp = r1.datestamp rozkaz r2.datachange desc) końcówka) *4), (0)) jako MaxkW,
    (wybrany wierzchołek (1) timestamp od #reportdata r2 dokąd r2.datestamp = r1.datestamp rozkaz r2.datachange desc, r2.timestamp desc) jako MaxDataChangeTimeStamp
 
OD Okres
LEWY ZEWNĘTRZNY ŁĄCZYĆ #ReportData r1 na r1.timestamp między psdate i pedate
krzyż stosować dbo.udf_getrates_3 (r1.Timestamp, @util)    
GRUPA PSname, r1.datestamp, PSdate
ROZKAZ PSdate
KOŃCÓWKA




---------------------------------------------------------------------------





UŻYWAĆ [EnergySuiteDB]
IŚĆ
/****** Przedmiot:  StoredProcedure [dbo]. [GetCostPerPeriod_Virtual] Pismo Data: 07/09/2010 15:32: 51 ******/
SET ANSI_NULLS DALEJ
IŚĆ
USTAWIAĆ QUOTED_IDENTIFIER DALEJ
IŚĆ
ZMIENIAĆ PROCEDURA [dbo]. [GetCostPerPeriod_Virtual] @sDate DATETIME, @Meter varchar (1000), @calc varchar (1000), @operator varchar (1000), @GasRate int, @pf pławik, @util varchar (50), @reportselection char (1), @CO2 pławik, @Carbon pławik


ZACZYNAĆ

--Władza czynnik (0) rzucać wyjątek, więc (0) potrzeba brać opieka
jeżeli isnull (@pf, (0)) =0 ustalony @pf = (1)

-- oznajmiać i tworzyć niektóre zmienna opierać się na przybywający parametr

OZNAJMIAĆ @PREVVAL NUMERYK (12, 4)
oznajmiać @grate varchar (12) --numeryk (12,4)
oznajmiać @edate datetime
oznajmiać @intervals int

oznajmiać @str_sdate varchar (20)
oznajmiać @str_edate varchar (20)

ustawiać @sdate = konwertyta (char (8), @sdate, 112)   -- upewniać się czas być przy "początek" okres
Jeżeli @reportselection = "M" set @sdate = DATEADD (miesiąc, DATEDIFF (miesiąc, (0), @sdate), (0))
Jeżeli @reportselection = "Y" set @sdate = datename (rok, @sdate) + "0101"

ustawiać @edate = konwertyta (char (8), @sdate, 112) + "23:59: 59.997"
Jeżeli @reportselection = "W" set @edate = konwertyta (char (8), @sdate+6,112) + "23:59: 59.997"
Jeżeli @reportselection = "M" set @edate = DATEADD (miesiąc, DATEDIFF (miesiąc, -1, @sdate), (0)) - 0.00000005
Jeżeli @reportselection = "Y" set @edate = datename (rok, @sdate) + "1231 23:59: 59.997"

ustawiać @str_sdate = konwertyta (varchar, @sdate - 1,120)
ustawiać @str_edate = konwertyta (varchar, @edate, 120)

ustawiać @intervals = dzień (dateadd (miesiąc, datediff (miesiąc, - (1), @sdate), (0)) - 1) 
Jeżeli @reportselection = "D" set @intervals = @intervals * 96  -- 96 kwartalny godzina w dzień.
Jeżeli @reportselection = "Y" set @intervals = (1)

jeżeli isnull (@gasrate, (0)) = (1)
   ustawiać @grate = "11.0786" -- 1.02264 * 39/3.6
inny
   ustawiać @grate = "1.0"

-- teraz tworzyć nasz zastępca raport dane ekstrakt od główny historia stół

JEŻELI OBJECT_ID ("tempdb. #REPORTDATA", "U ") BYĆ NIEOBOWIĄZUJĄCY KROPLA STÓŁ #REPORTDATA  -- musieć potrzebować
 
TWORZYĆ STOŁOWY #REPORTDATA
(
    ID int tożsamość początkowy klucz,
    TLInstance int,
    TimeStamp DATETIME,
    Hundredths INT,      
    Dane NUMERYK (12, 4),
    DataChange NUMERYK (12, 4),
    DateStamp datetime
)

-- zaludniać nasz raportowy dane

WSZYWKA W #ReportData (Timestamp, tlinstance, Hundredths, Dane, Datestamp)
exec ('WYBRANY Timestamp, tlinstance, Hundredths, konwertyta (real, Dane) * "+@grate+", skrzynka gdy ''' +@reportselection+ ''' = '' Y '' wtedy konwertyta (char (6), timestamp, 112) + '' 01 '' inny konwertyta (char (8), timestamp, 112) końcówka
OD HistorianDB.dbo.TLData 
DOKĄD TLInstance w ("+@Meter+")
I timestamp między ''' +@str_sdate+ ''' i ''' +@str_edate+ '''
I Type=0 
I isnumeric (dane) =1
ROZKAZ Tlinstance, timestamp, recordnumber')        

-- robić the aktualizacja nasz dane the różnica między metrowy czytanie i koszt

AKTUALIZOWAĆ #reportdata
USTAWIAĆ DataChange = #reportdata. Dane - isnull (prev.data, 0.00)
OD #ReportData 
lewy zewnętrzny łączyć #reportdata prev na #reportdata.tlinstance = prev.tlinstance i #reportdata.id - (1) = prev.id 
dokąd #reportdata.timestamp między @sdate i @edate

-- teraz my mieć the datachange my móc teraz @operations i @calc
jeżeli object_id ("tempdb. #tmp_meter", "U ") być nieobowiązujący kropla stół #tmp_meter
jeżeli object_id ("tempdb. #tmp_operator", "U ") być nieobowiązujący kropla stół #tmp_operator
jeżeli object_id ("tempdb. #tmp_calc", "U ") być nieobowiązujący kropla stół #tmp_calc

wybrany tożsamość (int, 1,1) gdy id, substring (@meter, liczba, charindex (",", @meter+', ', liczba) - liczba) metr
w #tmp_meter
od (wybrany @meter jako metr) m
krzyż łączyć (wybrany liczba od mistrz. .spt_values dokąd typ = "p ") n
dokąd substring (", "+@meter, liczba, 1) =","
i numerowy <= len (@meter)

wybrany tożsamość (int, 1,1) gdy id, substring (@operator, liczba, charindex (",", @operator+', ', liczba) - liczba) jako operator
w #tmp_operator
od (wybrany @operator jako operator) m
krzyż łączyć (wybrany liczba od mistrz. .spt_values dokąd typ = "p ") n
dokąd substring (", "+@operator, liczba, 1) =","
i numerowy <= len (@operator)

wybrany tożsamość (int, 1,1) gdy id, substring (@calc, liczba, charindex (",", @calc+', ', liczba) - liczba) jako calc
w #tmp_calc
od (wybrany @calc jako calcs) m
krzyż łączyć (wybrany liczba od mistrz. .spt_values dokąd typ = "p ") n
dokąd substring (", "+@calc, liczba, 1) =","
i numerowy <= len (@calc)

oznajmiać @parse varchar (4000)
wybierać @parse = isnull (@parse+'', '') + operator +" (skrzynka gdy ''' +operator+ ''' wewnątrz ('' * '', ''/'') i isnull (["+ metr +"], (0)) = (0) wtedy (1) inny isnull (["+ metr +"], (0)) end' + "*" + calc + ")"
od #tmp_meter m
wewnętrzny łączyć #tmp_calc c na m.id = c.id
wewnętrzny łączyć #tmp_operator o na m.id = o.id

oznajmiać @columns varchar (2000)
wybierać @columns = isnull (@columns+', ", '') +" ["+ metr +"] '
od #tmp_meter m
wewnętrzny łączyć #tmp_calc c na m.id = c.id
wewnętrzny łączyć #tmp_operator o na m.id = o.id
grupa metr

jeżeli object_id ("tempdb. #tmp_reportdata", "U ") być nieobowiązujący kropla stół #tmp_reportdata
tworzyć stołowy #tmp_reportdata (timestamp datetime, datestamp datetime, datachange decimal (12,4))

wkładać #tmp_reportdata
exec ("wybrany timestamp, datestamp, konwertyta (decimal (12,4), (0) ' +@parse+") jako datachange od
(wybrany timestamp, datestamp, tlinstance, konwertyta (decimal (12,4), datachange) jako datachange od #reportdata) src
PIVOT
(suma (datachange) dla tlinstance w ("+@columns+")) pvt')

-- teraz my móc the raport

; Z Okres
(
   Wybrany skrzynka gdy @reportselection = "D" wtedy dateadd (minuta, liczba * 15, @sdate) inny skrzynka gdy @reportselection = "Y" wtedy dateadd (miesiąc, liczba, @sdate) inny dateadd (dzień, liczba, @sdate) końcówka końcówka jako PSDate 
   , skrzynka gdy @reportselection = "D" wtedy dateadd (minuta, liczba * 15 + 15, @sdate) - 0.00000005 inny skrzynka gdy @reportselection = "Y" wtedy DATEADD (miesiąc, DATEDIFF (miesiąc, -1, dateadd (miesiąc, liczba, @sdate)), (0)) - 0.00000005 inny konwertyta (char (8), @sdate+number, 112) + "23:59: 59.997" końcówka końcówka 59.997 
   , skrzynka gdy @reportselection = "D" wtedy opuszczać (datename (dw, @sdate), 03) +''+ konwertyta (char (8), @sdate, 03) +right (konwertyta (char (19), dateadd (minuta, liczba * 15, @sdate), 100), 8) inny skrzynka gdy @reportselection = "Y" wtedy opuszczać (datename (miesiąc, dateadd (miesiąc, liczba, @sdate)), 3) + '' + datename (rok, @sdate) inny lewica (datename (dw, dateadd (dzień, liczba, @sdate)), 3) + '' + konwertyta (char (8), dateadd (dzień, liczba, @sdate), 03) końcówka końcówka jako PSName 
   , skrzynka gdy @reportselection = "D" wtedy 1.0/96.0 inny skrzynka gdy @reportselection w ("M", "W ") wtedy 1.0 inny dzień (dateadd (miesiąc, number+datediff (miesiąc, -1, @sdate), (0)) - 1) końcówka końcówka jako dayparts
   od mistrz. .spt_values n z (nolock) 
   dokąd typ = "p"
   i skrzynka gdy @reportselection = "D" wtedy dateadd (minuta, liczba * 15, @sdate) inny skrzynka gdy @reportselection = "Y" wtedy dateadd (miesiąc, liczba, @sdate) inny dateadd (dzień, liczba, @sdate) końcówka końcówka < @edate
)
WYBIÓRKA 
    PSname jako Data,
    SUMA (isnull (r1.datachange, (0))) JAKO day_data,
    SUMA (isnull (r1.datachange, (0)) *@CO2) JAKO CO2_data,
    SUMA (isnull (r1.datachange, (0)) *@Carbon) JAKO Carbon_data,
    SUMA (isnull (r1.datachange, (0)) *chargerate) JAKO DataCost,
    SUMA (isnull (r1.datachange, (0)) *levy) jako TotalLevy,
    totalCap (skrzynka gdy r1.datestamp być nieobowiązujący wtedy (0) inny caprate końcówka)/@intervals jako TotalCap,                           
    chargeCap (skrzynka gdy r1.datestamp być nieobowiązujący wtedy (0) inny chargecap końcówka) jako ChargeCap,
    standingDayCharge (skrzynka gdy r1.datestamp być nieobowiązujący wtedy (0) inny dayparts * StandingDayCharge końcówka) jako StandingDayCharge,
    końcówka (skrzynka gdy r1.datestamp być nieobowiązujący wtedy (0) inny dayparts * StandingDayCharge końcówka) 
    + SUMA (isnull (r1.datachange, (0)) * (chargerate + pobór)) 
    + totalCost (skrzynka gdy r1.datestamp być nieobowiązujący wtedy (0) inny caprate końcówka)/@intervals jako TotalCost,
    isnull (((skrzynka gdy @reportselection = "D" wtedy SUMA (isnull (r1.datachange, (0))) inny (wybrany wierzchołek (1) datachange od #tmp_reportdata r2 dokąd r2.datestamp = r1.datestamp rozkaz r2.datachange desc) końcówka) *4)/@pf, (0)) jako MaxkVA,
    isnull (((skrzynka gdy @reportselection = "D" wtedy SUMA (isnull (r1.datachange, (0))) inny (wybrany wierzchołek (1) datachange od #tmp_reportdata r2 dokąd r2.datestamp = r1.datestamp rozkaz r2.datachange desc) końcówka) *4), (0)) jako MaxkW,
    (wybrany wierzchołek (1) timestamp od #tmp_reportdata r2 dokąd r2.datestamp = r1.datestamp rozkaz r2.datachange desc, r2.timestamp desc) jako MaxDataChangeTimeStamp
 
OD Okres
LEWY ZEWNĘTRZNY ŁĄCZYĆ #tmp_ReportData r1 na r1.timestamp między psdate i pedate
krzyż stosować dbo.udf_getrates_3 (r1.Timestamp, @util)    
GRUPA PSname, r1.datestamp, PSdate
ROZKAZ PSdate
KOŃCÓWKA

Odpowiedź : Modyfikować SQL SP początkowy Początek Wartość

OK,

W być w:

AKTUALIZACJA #reportdata
USTALONY DataChange = #reportdata. Dane - isnull (prev.data, @prevval)
OD #ReportData
lewy zewnętrzny łączyć #reportdata prev na #reportdata.id - (1) = prev.id


Jeżeli tam  być poprzedzający wartość, then my móc:

AKTUALIZACJA #reportdata
USTALONY DataChange = #reportdata. Dane - isnull (prev.data, #reportdata. Dane)
OD #ReportData
lewy zewnętrzny łączyć #reportdata prev na #reportdata.id - (1) = prev.id


Już nie także znaczyć my już nie potrzebować:

USTALONY @PrevVal = isnull ((WYBRANY wierzchołek (1) konwertyta (real, Dane) * @grate
                        OD HistorianDB.dbo.TLData
                        DOKĄD TLInstance = @Meter
                        I timestamp <�>                        I Type=0
                        I isnumeric (dane) =1
                        ROZKAZ Timestamp desc), (0))

I myśleć the oryginalny wszywka w the reportdata stół zawrzeć ealier wejście che być inny opcja - bagatelizować jakaś niedokładność openin the pasmo troszeczkę dla the aktualizacja, then upewniać się my tylko donosić na the odmianowy pasmo (lub usuwać z pasmo rząd po the aktualizacja).




Inne rozwiązania  
 
programming4us programming4us