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