Torna al Thread

'carico l'elenco degli eventi per cui devo calcolare le quote ( ogni ciclo impiega circa 4 minuti, ripetuto per 60/70 record ) strsql = "select bet.periodo, bet.descri, eventi.tipo, eventi.id, eventi.idbet, eventi.inizio, eventi.scadenza from bet with(nolock) inner join eventi with(nolock) on bet.id = eventi.idbet where bet.cat <> 'cup' and eventi.descri = 'Vincente' and dateadd(day, 1, eventi.scadenza ) >= getdate() and eventi.inizio <= getdate() order by bet.periodo asc, bet.id asc" using mycmd2 = new sqlcommand( strsql, myconn ) using myreader2 = mycmd2.executereader() while ( myreader2.read() ) ' carico l'elenco delle celebrita' di cui devo creare la quota + il numero di voti e la media per 3 periodi differenti ( il tempo di elaborazione di ogni record è inferiore al secondo, ma moltiplicato per 1000 record circa ho il tempo di 4 minuti che ti ho scritto prima) strsql = "declare @cat nvarchar(10) declare @filtro nvarchar(255) declare @filtro2 nvarchar(255) declare @ordine nvarchar(10) declare @periodo int select @cat = bet.cat, @periodo = bet.periodo, @filtro = bet.filtro, @filtro2 = bet.filtro2, @ordine = bet.ordine from bet with(nolock) where bet.id = @id declare @str nvarchar(max) set @str = 'declare @periodo int set @periodo = ' + cast( @periodo as nvarchar ) + ' declare @inizio date declare @inizio2 date declare @fine date declare @fine2 date declare @limite int declare @limite2 int select top 1 @inizio = periodi.inizio, @fine = periodi.fine + 1, @inizio2 = periodi.inizio2, @fine2 = periodi.fine2 + 1, @limite = periodi.limite / 2, @limite2 = periodi.limite from periodi with(nolock) where periodi.val = @periodo select ''' + @ordine + ''' as ordine, @limite2 as limite, ( case when app.pos is null then 9999 else app.pos end ) as pos, ( case when app.media is null then 9999 else app.media end ) as media, ( case when app2.pos is null then 9999 else app2.pos end ) as pos2, ( case when app2.media is null then 9999 else app2.media end ) as media2, ( case when app3.pos is null then 9999 else app3.pos end ) as pos3, ( case when app3.media is null then 9999 else app3.media end ) as media3, celeb.id as idceleb, ( case when app.numero is null then 0 else app.numero end ) as numero1, app2.numero as numero2, app3.numero as numero3 from ( ( celeb left join ( select row_number() over ( order by cast ( sum(voti.' + @cat + ') as decimal(9,2) ) / cast( count(voti.id) as decimal(18,9) ) ' + @ordine + ', min(voti.data) asc ) as pos, cast( round( cast ( sum(voti.' + @cat + ') as decimal(18,9) ) / cast( count(voti.id) as decimal(18,9) ), 0 ) as integer ) as media, celeb.id as idceleb, count(voti.id) as numero from celeb with(nolock) inner join voti with(nolock) on celeb.id = voti.idceleb where celeb.data <= getdate() and voti.data >= @inizio and voti.data < @fine and voti.data < dateadd( hour, -2, getdate() ) ' + @filtro + @filtro2 + ' group by celeb.id having count(voti.id) >= @limite ) as app on celeb.id = app.idceleb ) left join ( select row_number() over ( order by cast ( sum(voti.' + @cat + ') as decimal(9,2) ) / cast( count(voti.id) as decimal(18,9) ) ' + @ordine + ', min(voti.data) asc ) as pos, cast( round( cast ( sum(voti.' + @cat + ') as decimal(18,9) ) / cast( count(voti.id) as decimal(18,9) ), 0 ) as integer ) as media, celeb.id as idceleb, count(voti.id) as numero from celeb with(nolock) inner join voti with(nolock) on celeb.id = voti.idceleb where celeb.data <= getdate() ' + @filtro + @filtro2 + ' group by celeb.id having count(voti.id) >= 5 ) as app2 on celeb.id = app2.idceleb ) left join ( select row_number() over ( order by cast ( sum(voti.' + @cat + ') as decimal(9,2) ) / cast( count(voti.id) as decimal(18,9) ) ' + @ordine + ', min(voti.data) asc ) as pos, cast( round( cast ( sum(voti.' + @cat + ') as decimal(18,9) ) / cast( count(voti.id) as decimal(18,9) ), 0 ) as integer ) as media, celeb.id as idceleb, count(voti.id) as numero from celeb with(nolock) inner join voti with(nolock) on celeb.id = voti.idceleb where celeb.data <= getdate() and voti.data >= @inizio2 and voti.data < @fine2 and voti.data < dateadd( hour, -2, getdate() ) ' + @filtro + @filtro2 + ' group by celeb.id having count(voti.id) >= @limite ) as app3 on celeb.id = app3.idceleb where celeb.data <= getdate() ' + @filtro + @filtro2 + ' order by celeb.id' exec( @str )" using myconn2 = new sqlconnection( configurationsettings.appsettings("sql") ) myconn2.open using mycmd = new sqlcommand( strsql, myconn2 ) mycmd.parameters.add( new sqlparameter( "@id", sqldbtype.int )).value = myreader2.item("idbet") using myreader = mycmd.executereader() while( myreader.read ) ' esegui i calcoli della quota in base al numero di voti ed alla media dei 3 periodi. if myreader.item("ordine") = "desc" then if myreader.item("media") > 88 then valore = 0.05 * myreader.item("pos") elseif myreader.item("media") > 86 then valore = 0.10 * myreader.item("pos") elseif myreader.item("media") > 84 then valore = 0.20 * myreader.item("pos") elseif myreader.item("media") > 82 then valore = 0.30 * myreader.item("pos") elseif myreader.item("media") > 80 then valore = 0.40 * myreader.item("pos") elseif myreader.item("media") > 78 then valore = 0.50 * myreader.item("pos") elseif myreader.item("media") > 76 then valore = 0.60 * myreader.item("pos") elseif myreader.item("media") > 74 then valore = 0.70 * myreader.item("pos") elseif myreader.item("media") > 72 then valore = 0.80 * myreader.item("pos") elseif myreader.item("media") > 70 then valore = 0.90 * myreader.item("pos") else valore = 1.00 * myreader.item("pos") end if else if myreader.item("media") < 50 or myreader.item("media") = 9999 then valore = 0.05 * myreader.item("pos") elseif myreader.item("media") < 55 then valore = 0.10 * myreader.item("pos") elseif myreader.item("media") < 60 then valore = 0.20 * myreader.item("pos") elseif myreader.item("media") < 65 then valore = 0.30 * myreader.item("pos") elseif myreader.item("media") < 68 then valore = 0.40 * myreader.item("pos") elseif myreader.item("media") < 70 then valore = 0.50 * myreader.item("pos") elseif myreader.item("media") < 72 then valore = 0.60 * myreader.item("pos") elseif myreader.item("media") < 75 then valore = 0.70 * myreader.item("pos") elseif myreader.item("media") < 78 then valore = 0.80 * myreader.item("pos") elseif myreader.item("media") < 80 then valore = 0.90 * myreader.item("pos") else valore = 1.00 * myreader.item("pos") end if end if if myreader.item("ordine") = "desc" then if myreader.item("media2") > 88 then valore2 = 0.05 * myreader.item("pos2") elseif myreader.item("media2") > 86 then valore2 = 0.10 * myreader.item("pos2") elseif myreader.item("media2") > 84 then valore2 = 0.20 * myreader.item("pos2") elseif myreader.item("media2") > 82 then valore2 = 0.30 * myreader.item("pos2") elseif myreader.item("media2") > 80 then valore2 = 0.40 * myreader.item("pos2") elseif myreader.item("media2") > 78 then valore2 = 0.50 * myreader.item("pos2") elseif myreader.item("media2") > 76 then valore2 = 0.60 * myreader.item("pos2") elseif myreader.item("media2") > 74 then valore2 = 0.70 * myreader.item("pos2") elseif myreader.item("media2") > 72 then valore2 = 0.80 * myreader.item("pos2") elseif myreader.item("media2") > 70 then valore2 = 0.90 * myreader.item("pos2") else valore2 = 1.00 * myreader.item("pos2") end if else if myreader.item("media2") < 50 or myreader.item("media2") = 9999 then valore2 = 0.05 * myreader.item("pos2") elseif myreader.item("media2") < 55 then valore2 = 0.10 * myreader.item("pos2") elseif myreader.item("media2") < 60 then valore2 = 0.20 * myreader.item("pos2") elseif myreader.item("media2") < 65 then valore2 = 0.30 * myreader.item("pos2") elseif myreader.item("media2") < 68 then valore2 = 0.40 * myreader.item("pos2") elseif myreader.item("media2") < 70 then valore2 = 0.50 * myreader.item("pos2") elseif myreader.item("media2") < 72 then valore2 = 0.60 * myreader.item("pos2") elseif myreader.item("media2") < 75 then valore2 = 0.70 * myreader.item("pos2") elseif myreader.item("media2") < 78 then valore2 = 0.80 * myreader.item("pos2") elseif myreader.item("media2") < 80 then valore2 = 0.90 * myreader.item("pos2") else valore2 = 1.00 * myreader.item("pos2") end if end if if myreader.item("ordine") = "desc" then if myreader.item("media3") > 88 then valore3 = 0.05 * myreader.item("pos3") elseif myreader.item("media3") > 86 then valore3 = 0.10 * myreader.item("pos3") elseif myreader.item("media3") > 84 then valore3 = 0.20 * myreader.item("pos3") elseif myreader.item("media3") > 82 then valore3 = 0.30 * myreader.item("pos3") elseif myreader.item("media3") > 80 then valore3 = 0.40 * myreader.item("pos3") elseif myreader.item("media3") > 78 then valore3 = 0.50 * myreader.item("pos3") elseif myreader.item("media3") > 76 then valore3 = 0.60 * myreader.item("pos3") elseif myreader.item("media3") > 74 then valore3 = 0.70 * myreader.item("pos3") elseif myreader.item("media3") > 72 then valore3 = 0.80 * myreader.item("pos3") elseif myreader.item("media3") > 70 then valore3 = 0.90 * myreader.item("pos3") else valore3 = 1.00 * myreader.item("pos3") end if else if myreader.item("media3") < 50 or myreader.item("media3") = 9999 then valore3 = 0.05 * myreader.item("pos3") elseif myreader.item("media3") < 55 then valore3 = 0.10 * myreader.item("pos3") elseif myreader.item("media3") < 60 then valore3 = 0.20 * myreader.item("pos3") elseif myreader.item("media3") < 65 then valore3 = 0.30 * myreader.item("pos3") elseif myreader.item("media3") < 68 then valore3 = 0.40 * myreader.item("pos3") elseif myreader.item("media3") < 70 then valore3 = 0.50 * myreader.item("pos3") elseif myreader.item("media3") < 72 then valore3 = 0.60 * myreader.item("pos3") elseif myreader.item("media3") < 75 then valore3 = 0.70 * myreader.item("pos3") elseif myreader.item("media3") < 78 then valore3 = 0.80 * myreader.item("pos3") elseif myreader.item("media3") < 80 then valore3 = 0.90 * myreader.item("pos3") else valore3 = 1.00 * myreader.item("pos3") end if end if if myreader.item("pos") <> 9999 and myreader.item("pos2") <> 9999 and myreader.item("pos3") <> 9999 then valore = ( valore * 0.98 ) + ( valore2 * 0.01 ) + ( valore3 * 0.01 ) elseif myreader.item("pos") <> 9999 and myreader.item("pos2") <> 9999 and myreader.item("pos3") = 9999 then valore = ( valore * 0.99 ) + ( valore2 * 0.01 ) elseif myreader.item("pos") <> 9999 and myreader.item("pos2") = 9999 and myreader.item("pos3") <> 9999 then valore = ( valore * 0.99 ) + ( valore3 * 0.01 ) elseif myreader.item("pos") = 9999 and myreader.item("pos2") = 9999 and myreader.item("pos3") = 9999 then valore = 20 elseif myreader.item("pos") = 9999 and myreader.item("pos3") <> 9999 and myreader.item("pos2") <> 9999 then valore = ( valore3 * 0.80 ) + ( valore2 * 0.20 ) elseif myreader.item("pos") = 9999 and myreader.item("pos3") <> 9999 and myreader.item("pos2") = 9999 then valore = valore3 elseif myreader.item("pos") = 9999 and myreader.item("pos3") = 9999 and myreader.item("pos2") <> 9999 then valore = valore2 end if if valore > 10 then valore *= 0.25 else valore *= 0.50 end if valore2 = valore valore3 = valore select myreader2.item("periodo") case 990000 to 992050 valore3 /= 3 valore2 /= 10 case 330000 to 335004 valore3 /= 3 valore2 /= 10 case 201000 to 205012 valore3 /= 3 valore2 /= 5 case 100000 to 199999 valore3 /= 3 if myreader.item("limite") <= myreader.item("numero1") then valore2 = 0 else valore2 /= 20 end if case else valore3 /= 3 if myreader.item("limite") <= myreader.item("numero1") then valore2 = 0 else valore2 /= 20 end if end select valore += 1 if valore < 1.10 then valore = math.round( valore, 2 ) elseif valore <= 6 then valore = math.round( valore, 1 ) else valore = math.round( valore, 0 ) end if valore2 += 1 if valore2 < 1.10 then valore2 = math.round( valore2, 2 ) elseif valore2 <= 6 then valore2 = math.round( valore2, 1 ) else valore2 = math.round( valore2, 0 ) end if valore3 += 1 if valore3 < 1.10 then valore3 = math.round( valore3, 2 ) elseif valore <= 6 then valore3 = math.round( valore3, 1 ) else valore3 = math.round( valore3, 0 ) end if 'aggiorno la tabella della quota (ora ho inserito un controllo che se il valore precedente e' lo stesso non faccio l'update per risparmiare un po' di tempo, comunque molto spesso sono diversi) if hour(now) = 4 or hour(now) = 8 or hour(now) = 12 or hour(now) = 16 or hour(now) = 20 or hour(now) = 0 then strsql = "declare @idevento int set @idevento = ( select eventi.id from eventi with(nolock) where eventi.tipo = @tipo and eventi.idbet = @idbet ) declare @precedente decimal(9,2) set @precedente = ( select quote.valore from quote with(nolock) where quote.idrif = @idrif and quote.idevento = @idevento ) if(@precedente <> @valore or @precedente <= 0 or @precedente is null) begin update quote set idevento = @idevento, idrif = @idrif, valore = @valore, prec = ( case when @valore = @precedente then 'uguale' when @valore > @precedente then 'up' else 'down' end ) where quote.idrif = @idrif and quote.idevento = @idevento if @@rowcount = 0 begin insert into quote ( idevento, idrif, valore, prec ) values ( @idevento, @idrif, @valore, 'new' ) end end set @idevento = ( select eventi.id from eventi with(nolock) where eventi.tipo = @tipo2 and eventi.idbet = @idbet ) set @precedente = ( select quote.valore from quote with(nolock) where quote.idrif = @idrif and quote.idevento = @idevento ) if(@precedente <> @valore2 or @precedente <= 0 or @precedente is null) begin update quote set idevento = @idevento, idrif = @idrif, valore = @valore2, prec = ( case when @valore2 = @precedente then 'uguale' when @valore2 > @precedente then 'up' else 'down' end ) where quote.idrif = @idrif and quote.idevento = @idevento if @@rowcount = 0 begin insert into quote ( idevento, idrif, valore, prec ) values ( @idevento, @idrif, @valore2, 'new' ) end end set @idevento = ( select eventi.id from eventi with(nolock) where eventi.tipo = @tipo3 and eventi.idbet = @idbet ) set @precedente = ( select quote.valore from quote with(nolock) where quote.idrif = @idrif and quote.idevento = @idevento ) if(@precedente <> @valore3 or @precedente <= 0 or @precedente is null) begin update quote set idevento = @idevento, idrif = @idrif, valore = @valore3, prec = ( case when @valore3 = @precedente then 'uguale' when @valore3 > @precedente then 'up' else 'down' end ) where quote.idrif = @idrif and quote.idevento = @idevento if @@rowcount = 0 begin insert into quote ( idevento, idrif, valore, prec ) values ( @idevento, @idrif, @valore3, 'new' ) end end" else strsql = "declare @idevento int set @idevento = ( select eventi.id from eventi with(nolock) where eventi.tipo = @tipo and eventi.idbet = @idbet ) declare @precedente decimal(9,2) set @precedente = ( select quote.valore from quote with(nolock) where quote.idrif = @idrif and quote.idevento = @idevento ) if(@precedente <> @valore or @precedente <= 0 or @precedente is null) begin update quote set idevento = @idevento, idrif = @idrif, valore = @valore where quote.idrif = @idrif and quote.idevento = @idevento if @@rowcount = 0 begin insert into quote ( idevento, idrif, valore, prec ) values ( @idevento, @idrif, @valore, 'new' ) end end set @idevento = ( select eventi.id from eventi with(nolock) where eventi.tipo = @tipo2 and eventi.idbet = @idbet ) set @precedente = ( select quote.valore from quote with(nolock) where quote.idrif = @idrif and quote.idevento = @idevento ) if(@precedente <> @valore2 or @precedente <= 0 or @precedente is null) begin update quote set idevento = @idevento, idrif = @idrif, valore = @valore2 where quote.idrif = @idrif and quote.idevento = @idevento if @@rowcount = 0 begin insert into quote ( idevento, idrif, valore, prec ) values ( @idevento, @idrif, @valore2, 'new' ) end end set @idevento = ( select eventi.id from eventi with(nolock) where eventi.tipo = @tipo3 and eventi.idbet = @idbet ) set @precedente = ( select quote.valore from quote with(nolock) where quote.idrif = @idrif and quote.idevento = @idevento ) if(@precedente <> @valore3 or @precedente <= 0 or @precedente is null) begin update quote set idevento = @idevento, idrif = @idrif, valore = @valore3 where quote.idrif = @idrif and quote.idevento = @idevento if @@rowcount = 0 begin insert into quote ( idevento, idrif, valore, prec ) values ( @idevento, @idrif, @valore3, 'new' ) end end" end if using myconn3 = new sqlconnection( configurationsettings.appsettings("sql") ) myconn3.open using mycmd3 = new sqlcommand( strsql, myconn3 ) mycmd3.parameters.add( new sqlparameter( "@idbet", sqldbtype.int )).value = myreader2.item("idbet") mycmd3.parameters.add( new sqlparameter( "@idrif", sqldbtype.int )).value = myreader.item("idceleb") mycmd3.parameters.add( new sqlparameter( "@valore", sqldbtype.decimal )).value = valore mycmd3.parameters.add( new sqlparameter( "@valore2", sqldbtype.decimal )).value = valore2 mycmd3.parameters.add( new sqlparameter( "@valore3", sqldbtype.decimal )).value = valore3 select myreader2.item("periodo") case 990000 to 992050 mycmd3.parameters.add( new sqlparameter( "@tipo", sqldbtype.nvarchar )).value = "year_win" mycmd3.parameters.add( new sqlparameter( "@tipo2", sqldbtype.nvarchar )).value = "year_top10" mycmd3.parameters.add( new sqlparameter( "@tipo3", sqldbtype.nvarchar )).value = "year_top3" case 330000 to 335004 mycmd3.parameters.add( new sqlparameter( "@tipo", sqldbtype.nvarchar )).value = "stag_win" mycmd3.parameters.add( new sqlparameter( "@tipo2", sqldbtype.nvarchar )).value = "stag_top10" mycmd3.parameters.add( new sqlparameter( "@tipo3", sqldbtype.nvarchar )).value = "stag_top3" case 201000 to 205012 mycmd3.parameters.add( new sqlparameter( "@tipo", sqldbtype.nvarchar )).value = "mens_win" mycmd3.parameters.add( new sqlparameter( "@tipo2", sqldbtype.nvarchar )).value = "mens_top5" mycmd3.parameters.add( new sqlparameter( "@tipo3", sqldbtype.nvarchar )).value = "mens_top3" case 100000 to 199999 mycmd3.parameters.add( new sqlparameter( "@tipo", sqldbtype.nvarchar )).value = "sett_win" mycmd3.parameters.add( new sqlparameter( "@tipo2", sqldbtype.nvarchar )).value = "sett_qual" mycmd3.parameters.add( new sqlparameter( "@tipo3", sqldbtype.nvarchar )).value = "sett_top3" case else mycmd3.parameters.add( new sqlparameter( "@tipo", sqldbtype.nvarchar )).value = "spec_win" mycmd3.parameters.add( new sqlparameter( "@tipo2", sqldbtype.nvarchar )).value = "spec_qual" mycmd3.parameters.add( new sqlparameter( "@tipo3", sqldbtype.nvarchar )).value = "spec_top3" end select try mycmd3.executenonquery() catch end try end using end using end while end using end using end using end while end using end using
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5