Knocks/BackEnd/Knoks.PriceDB/Stored Procedures/USP_UTIL_CRT_ReAggDay.sql

126 lines
5.4 KiB
Transact-SQL

--exec USP_UTIL_CRT_Validation '2016-06-03'
CREATE procedure [dbo].[USP_UTIL_CRT_ReAggDay]
(@checkDay datetime)
as
declare @TableName sysname,@UnitDefinition varchar(15),@TimeUnit varchar(10),@TimeInterval varchar(10),@sql nvarchar(max),@minLastRun datetime,@Source_TableName sysname
create table #temp (CRTD_ID int,
CRTD_Period datetime,
CRTD_FirstQuote datetime,
CRTD_LastQuote datetime,
CRTD_PairSymbol varchar(15),
CRTD_BidOpeningValue float ,
CRTD_BidClosingValue float ,
CRTD_BidLowValue float ,
CRTD_BidHighValue float ,
CRTD_MidOpeningValue float ,
CRTD_MidClosingValue float ,
CRTD_MidLowValue float ,
CRTD_MidHighValue float,
StartIntervalDate datetime,
EndIntervalDate datetime)
create index ix_StartIntervalDate on #temp(StartIntervalDate)
create table #temp1 (StartPeriod datetime,
EndPeriod datetime,
First_Quote datetime,
Last_Quote datetime,
CRTD_PairSymbol varchar(15),
BidMin_Value float,
BidMax_Value float,
MidMin_Value float,
MidMax_Value float,
Min_RowId int,
Max_RowId int,
BidOpen_Value float,
BidClose_Value float,
MidOpen_Value float,
MidClose_Value float )
declare cTasks cursor local static for
select CRTT_TableName, CRTT_UnitDefinition
from CRT_tasks with (nolock)
where CRTT_Name <> '1Minute'
and CRTT_IsActive = 1 and CRTT_Source_TableName <> ''
order by CRTT_ID
open cTasks
fetch next from cTasks into @TableName, @UnitDefinition
while @@fetch_status = 0
begin
truncate table #temp
truncate table #temp1
set @TimeUnit=substring(@UnitDefinition,1,1)
set @TimeInterval=substring(@UnitDefinition,2,4)
SELECT @TimeUnit=CASE @TimeUnit when 'N' then 'minute'
when 'H' then 'hour'
when 'D' then 'day'
when 'W' then 'Week'
when 'M' then 'Month'
end
set @SQL =
'insert into #temp(CRTD_Period,CRTD_FirstQuote,CRTD_LastQuote,CRTD_PairSymbol,CRTD_BidOpeningValue,CRTD_BidClosingValue,CRTD_BidLowValue,CRTD_BidHighValue,CRTD_MidOpeningValue,
CRTD_MidClosingValue,CRTD_MidLowValue,CRTD_MidHighValue,StartIntervalDate,EndIntervalDate)
SELECT CRTD_Period ,CRTD_FirstQuote ,CRTD_LastQuote ,CRTD_PairSymbol ,CRTD_BidOpeningValue ,CRTD_BidClosingValue
,CRTD_BidLowValue ,CRTD_BidHighValue ,CRTD_MidOpeningValue ,CRTD_MidClosingValue ,CRTD_MidLowValue ,CRTD_MidHighValue,
dateadd('+@TimeUnit+', datediff('+@TimeUnit+',0,CRTD_Period) /'+ @TimeInterval+' * '+@TimeInterval+', 0) as StartIntervalDate,
dateadd(millisecond,-3,dateadd('+@TimeUnit+','+@TimeInterval+', (dateadd('+@TimeUnit+', datediff('+@TimeUnit+',0,CRTD_Period) / '+@TimeInterval+' * '+@TimeInterval+', 0)))) as EndIntervalDate
from YB_Charts.dbo.CRT_Data_1Minute (nolock)
where CRTD_Period BETWEEN CAST(@checkDay AS DATE) AND CAST(dateadd(millisecond,-3,@checkDay+1) AS DATEtIME)'
exec sp_executesql @SQL,N'@checkDay datetime ',@checkDay
if @TimeUnit='Week'--change so the week will be from sunday to saturday
begin
UPDATE #temp
SET StartIntervalDate=StartIntervalDate-1,
EndIntervalDate=EndIntervalDate-1
end
insert into #temp1
(StartPeriod, EndPeriod, First_Quote, Last_Quote, CRTD_PairSymbol, BidMin_Value, BidMax_Value, MidMin_Value, MidMax_Value)
select StartIntervalDate,
EndIntervalDate,
min(CRTD_FirstQuote) First_Quote, max(CRTD_LastQuote) Last_Quote,
A.CRTD_PairSymbol,
min(CRTD_BidLowValue) BidMin_Value, max(CRTD_BidHighValue) BidMax_Value,
min(CRTD_MidLowValue) MidMin_Value, max(CRTD_MidHighValue) MidMax_Value
from #temp A
group by StartIntervalDate,EndIntervalDate,A.CRTD_PairSymbol
update A
set BidOpen_Value = B.CRTD_BidOpeningValue,
MidOpen_Value = B.CRTD_MidOpeningValue
FROM #temp1 A
INNER JOIN (select StartIntervalDate,CRTD_PairSymbol,CRTD_BidOpeningValue,CRTD_MidOpeningValue,ROW_NUMBER() over (partition by CRTD_PairSymbol,StartIntervalDate order by crtd_period) as rownum
from #temp) B ON A.CRTD_PairSymbol = B.CRTD_PairSymbol and A.StartPeriod=B.StartIntervalDate
where B.rownum=1
update A
set BidClose_Value = B.CRTD_BidClosingValue,
MidClose_Value = B.CRTD_MidClosingValue
FROM #temp1 A
INNER JOIN (select StartIntervalDate,CRTD_PairSymbol,CRTD_BidClosingValue,CRTD_MidClosingValue,ROW_NUMBER() over (partition by CRTD_PairSymbol,StartIntervalDate order by crtd_period desc) as rownum
from #temp) B ON A.CRTD_PairSymbol = B.CRTD_PairSymbol and A.StartPeriod=B.StartIntervalDate
where B.rownum=1
set @SQL =
'delete from ' + quotename(@TableName) +
' where CRTD_Period BETWEEN CAST(@checkDay AS DATE) AND CAST(dateadd(millisecond,-3,@checkDay+1) AS DATEtIME)'
exec sp_executesql @SQL,N'@checkDay datetime ',@checkDay
set @SQL =
'insert into ' + quotename(@TableName) +
'(CRTD_Period, CRTD_FirstQuote, CRTD_LastQuote, CRTD_PairSymbol,
CRTD_BidOpeningValue, CRTD_BidClosingValue, CRTD_BidLowValue,CRTD_BidHighValue,
CRTD_MidOpeningValue, CRTD_MidClosingValue, CRTD_MidLowValue,CRTD_MidHighValue)
select StartPeriod, First_Quote, Last_Quote, A.CRTD_PairSymbol, BidOpen_Value, BidClose_Value, BidMin_Value, BidMax_Value,
MidOpen_Value, MidClose_Value, MidMin_Value, MidMax_Value
from #temp1 A'
exec(@SQL)
fetch next from cTasks into @TableName, @UnitDefinition
end
close cTasks
deallocate cTasks
drop table #temp
drop table #temp1