Tema: Re: MSSQL : Kaip uzpildyti skyles
Autorius: Jornada Del Muerto
Data: 2010-12-22 15:35:00
Dar cia galima optimizacija, paemus paskutine Value reiksme be reikalo naujos neselectinti jei su tokia data nieko ner, tada naudoti paskutini turima Value, tai gal kiek lengvesniu selectu kapot db eitu.

"Jornada Del Muerto" <Jornada@Lythum.lt> wrote in message news:iesu1i$ud$1@trimpas.omnitel.net...
> Tiesa next hour funkcijoj klaida buvo, didejo ne valanda o diena (kazkaip is inercijos parasiau), cia gera funkcija:
> 
> CREATE FUNCTION [dbo].[OmniNews_NextHour] (@data datetime) 
> RETURNS datetime
> AS
> BEGIN
> declare @retVal datetime
> 
> -- Nukerpame minutes ir padarome 59min - ta prasme paskutine valandos minute
> -- Tam kad neiskritinetu kazkokia minute
> Set @retVal = CAST ( (CONVERT(char(14),DATEADD(hour,1,@data),25) + '59') As DATETIME)
> 
> RETURN @retVal
> END
> 
> 
> Turint sias funkcijas su sia procedura eina istraukt pagal duotas taisykles bet koki diapazona, tiesa viskas labai kreivai dirba, bet konkreciau ir sunku pasakyti, bet turi si procedura veikti, jai reikia abieju funkciju kurias daviau:
> 
> CREATE procedure [dbo].[AGP_OmniNews_Diapazonas] (@from datetime, @to datetime) AS
> 
> declare @result table (DT datetime, Value int)
> declare @currentDate datetime
> declare @toBigDate datetime
> 
> set @toBigDate = dbo.OmniNews_NextHour(@to) -- gauname per didele 1 valanda data, pagal ja eisime ciklu tol kol einamoji data nebus uz ja didesne
> 
> set @currentDate = @from
> 
> WHILE @currentDate < @toBigDate BEGIN
> 
> INSERT INTO @result (DT, Value) Values (@currentDate, dbo.OmniNews_GetValueByDate(@currentDate))
> Set @currentDate = dbo.OmniNews_NextHour(@currentDate)
> END
> 
> SELECT * FROM @result ORDER BY DT
> GO
> 
>