SQL Server - Resolucion de Tiempo en SQL

 
Vista:

Resolucion de Tiempo en SQL

Publicado por Eduardo (3 intervenciones) el 02/12/2006 18:42:39
Hola Compañeros.

Tengo una pequeña situacion que tengo que resolver... tengo que hacer un script donde tengo que realizar una resolucion de tiempo para una consulta...

por ejemplo tengo un reporte que generar como criterios de entrada al store seria

centrales, variables,fecha_inicio y fecha_final

supondamos que la Fecha_inicio es: 19/10/2006 00:00:00 y mi fecha_final es 19/11/2006 17:00:00

entonces el cliente pide una resolcion de 30 minutos

el resultado seria:

19/10/2006 00:00:00
19/10/2006 00:30:00
19/10/2006 01:00:00
19/10/2006 01:30:00
19/10/2006 02:00:00
19/10/2006 02:30:00
.
.
.
.
.
19/11/2006 16:30:00
19/11/2006 17:00:00

Como podria realizar esto y pasarle los demas parametros, como son variables y valor.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Resolucion de Tiempo en SQL

Publicado por Isaías (3308 intervenciones) el 04/12/2006 19:37:23
Crea una tabla temporal, y por cada registro que tengas, insertas en esta tabla, los registros por cada media hora, hasta cumplir con el rango final (19/11/2006 17:00:00).

La verdad, que no veo otra solucion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Resolucion de Tiempo en SQL

Publicado por Eduardo (3 intervenciones) el 07/12/2006 01:24:26
Hola Isaia...

Gracias por tu respuesta... lo que pasa que no he tenido mucha interaccion con la programación de SQL y la verdad no soy muy bueno para la programación Avanzada en SQL... no se podrias mas o menos darme un codigo.

De antemano te agradezco el apoyo.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Resolucion de Tiempo en SQL

Publicado por Isaías (3308 intervenciones) el 07/12/2006 20:13:01
Con gusto, ¿ya tienes tu store, puedes postear el codigo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Resolucion de Tiempo en SQL

Publicado por Eduardo (3 intervenciones) el 12/12/2006 17:04:47
Hola Isaías:

antes que nada espero que te encuentres de maravilla...Bueno aqui anexo el codigo para que le des una checada.

Gracias.

--drOP PROCEDURE setSenal
--SELECT * FROM ##resultado SELECT * FROM ##senal SELECT * FROM ##fecha

--exec setSenal '1','A01U1040,A01S1025','05/12/2006 13:16:59','05/12/2006 16:00:00','6'
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

CREATE PROCEDURE setSenal @centrales nvarchar (300), @senales nvarchar(4000),@fIni nvarchar (20), @fFin nvarchar (20), @Res int
AS
begin
BEGIN
Declare @sql1 nchar(4000)
Declare @fMin DateTime
DECLARE @perIni datetime
DECLARE @perFin datetime
DECLARE @signal nvarchar(8)
DECLARE @fechaX nvarchar(16)
DECLARE @sigval float
DECLARE @sqlOut nvarchar(1000)
DECLARE @message nvarchar(80)
DECLARE @s TABLE (Id_Senal nVarchar(10))
if Exists(Select name from tempdb..sysobjects where name like '##resultado') Drop Table ##resultado
if Exists(Select name from tempdb..sysobjects where name like '##senal') Drop Table ##senal
if Exists(Select name from tempdb..sysobjects where name like '##fecha') Drop Table ##fecha

CREATE TABLE ##senal(Id_Senal Varchar(10), Fecha_Registro DateTime, Valor Float)
CREATE TABLE ##fecha(desde datetime, hasta datetime)
SELECT @sql1 = 'CREATE TABLE ##resultado(Fecha_Registro DateTime,' +
Replace(@senales, ',' , ' nvarchar(40), ') + ' nvarchar(40))'
EXEC sp_executesql @sql1

SET @perIni = @fIni

SELECT @sql1 = 'Insert Into ##senal ' +
'SELECT a.Id_Senal, a.Fecha_Registro, a.Valor ' +
'FROM (Select va.Id_Senal, va.Fecha_Registro, CAST(va.Valor as Float) Valor '+
'From VALORES_ANALOGICOS va ' +
'Union ' +
'Select vb.Id_Senal, vb.Fecha_Registro, CAST(vb.Valor as Float) Valor ' +
'From VALORES_BINARIOS vb) a, VARIABLES_C01 v,TIPOS_DE_SISTEMAS c ' +
'WHERE v.Id_Senal = a.Id_Senal ' +
'AND v.No_Sistema = c.No_Sistema ' +
'AND (CAST(a.Fecha_Registro AS DATETIME) BETWEEN ''' + CAST(@fIni as nvarchar)+''' AND '''+CAST(@fFin as nvarchar)+ ''') ' +
'AND a.Id_Senal in ('''+rtrim(replace(@senales,',',''','''))+''') ' +
'AND c.No_Central IN ('''+rtrim(replace(@centrales,',',''','''))+''') '
EXEC sp_executesql @sql1


IF @Res =0
BEGIN
INSERT INTO ##fecha
SELECT Distinct Fecha_Registro desde, Fecha_Registro hasta
From ##senal

SELECT @sql1 = 'Insert Into ##senal ' +
'SELECT a.Id_Senal, DATEADD(minute, -1 * 720,''' + @fIni + ''') AS Fecha_Registro, -999999.99 As Valor '+
'FROM (Select Distinct x.Id_Senal ' +
'From (Select va.Id_Senal From VALORES_ANALOGICOS va ' +
'Union ' +
'Select vb.Id_Senal From VALORES_BINARIOS vb) x ' +
'Where x.Id_Senal in ('''+rtrim(replace(@senales,',',''','''))+''') '
END
ELSE
BEGIN
SELECT @sql1 = 'Insert Into ##senal ' +
'SELECT a.Id_Senal, DATEADD(minute, -1 * ' + cast(@Res As nvarchar)+ ',''' + @fIni + ''') AS Fecha_Registro, -999999.99 As Valor '+
'FROM (Select Distinct x.Id_Senal ' +
'From (Select va.Id_Senal From VALORES_ANALOGICOS va ' +
'Union ' +
'Select vb.Id_Senal From VALORES_BINARIOS vb) x ' +
'Where x.Id_Senal in ('''+rtrim(replace(@senales,',',''','''))+''') '
WHILE @perIni < @fFin
BEGIN
SET @perFin = dateadd(minute,@Res,@perIni)
INSERT ##fecha
SELECT @perIni, @perFin
SET @perIni = @perFin
END
END


--
DECLARE @cReg int
SELECT @cReg = Count(Distinct Id_Senal)
FROM ##senal
print @cReg
DECLARE @sqlIns nvarchar(4000)
DECLARE @desde datetime, @hasta datetime

DECLARE per_cursor CURSOR FOR
SELECT desde, hasta From ##fecha
OPEN per_cursor

FETCH NEXT FROM per_cursor
INTO @desde, @hasta

WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @sqlIns = 'Insert ##resultado Select ''' + CAST(@desde as nvarchar) + '''' + REPLICATE(', ''0''',@cReg)
EXEC sp_executesql @sqlIns
FETCH NEXT FROM per_cursor
INTO @desde, @hasta
END

CLOSE per_cursor
DEALLOCATE per_cursor

DECLARE sen_cursor CURSOR FOR
SELECT Id_Senal From ##senal
OPEN sen_cursor
-- Avanzamos un registro y cargamos en las variable el valor encontrado en el primer registro
FETCH NEXT FROM sen_cursor
INTO @signal

WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE sen_res CURSOR FOR
SELECT Fecha_Registro From ##resultado
OPEN sen_res

FETCH NEXT FROM sen_res
INTO @fechaX

SELECT @message = 'Fecha '+@fechaX+' Senal '+@signal
print @message

WHILE @@FETCH_STATUS = 0
BEGIN
-- SELECT @sqlOut = 'Select @sigval = (select top 1 isnull( cast(C.Valor as float),0.0)) From ##senal C Where C.Id_Senal=''' + isnull(@signal,'') + '''and C.Fecha_Registro = '+
-- '(Select isnull(Max(C1.Fecha_Registro),getdate()) From ##senal C1 where C.Id_Senal = C1.Id_Senal and C.Fecha_Registro <= ''' + @fechaX + ''') union all select 1'
-- EXEC sp_executesql @sqlOut

Select @sigval = C.Valor
From ##senal C
Where C.Id_Senal=@signal and C.Fecha_Registro = (Select Max(C1.Fecha_Registro) From ##senal C1 where C.Id_Senal = C1.Id_Senal and C.Fecha_Registro <= @fechaX )

--print @sqlOut

SELECT @sqlIns = 'Update ##resultado SET ' + @signal + ' = ' + isnull(cast(@sigval as nvarchar(20)),0)+ ' where cast(Fecha_Registro as datetime) <= ''' + isnull(@fechaX,'0') + ''''
EXEC sp_executesql @sqlIns

FETCH NEXT FROM sen_res
INTO @fechaX
END
/*CLOSE sen_cursor
DEALLOCATE sen_cursor*/

CLOSE sen_res
DEALLOCATE sen_res

FETCH NEXT FROM sen_cursor
INTO @signal
END

CLOSE sen_cursor
DEALLOCATE sen_cursor

END

end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Resolucion de Tiempo en SQL

Publicado por Isaías (3308 intervenciones) el 13/12/2006 22:05:54
Esta bien lo de la creacion de tablas temporales, yo haria lo mismo, pero mas simplificado, por un lado, generaria una tabla temporal con TODOS los intervalos de tiempo (por medias horas) de tu rango de fechas inicial y final.

Despues, sacaria de tu tabla fuente los datos que encontraras en ese intervalo de tiempo, convirtiendo a medias horas y uniria con mi tabla temporal, para mostrar todas aquellos intervalos de tiempo en los que no hay datos.

Espero haberme explicado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar