Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   SQL Server (http://www.forosdelweb.com/f87/)
-   -   ayuda con esta query. (http://www.forosdelweb.com/f87/ayuda-con-esta-query-583436/)

alumnomedio 06/05/2008 08:05

ayuda con esta query.
 
Hola Amigos tengo que hacer un procedimiento almacenados en el cual limpie la misma tabla q ue contien los datos.

Tablas: historial_estadoactualbus

dbo.historial_estadoactualbus.
id bus fechahora codstado
9029 2008-03-09 22:21:20.000 1
9272 2008-03-09 22:25:55.000 1
9228 2008-03-09 22:25:59.000 2
9265 2008-03-09 22:25:55.000 2

Tabla: bus
dbo.bus
idbus patente
9029 BDWL-39
9272 BDWL-40
9228 BDWL-41
9265 BDWL-42

mis dos tabla.

ahora tengo la nueva tabla llamada prueba que queda asi.
idbus,fechahora,codestado,patente.

si se dan cuenta mas arriba la fecha hora tiene un horario yo debo crear un procedimiento almacenado.
que vaya ordenando cada dato a cada media hora siempre que cambie de estado ejemplo.

24 horas = 48 media horas que van desde 0:00 hasta las 23:59:59

Tabla: prueba
id bus fechahora codstado patente
9229 2008-03-09 22:00:20.000 1 BDWL-39
9229 2008-03-09 22:15:55.000 1 BDWL-39
9229 2008-03-09 22:18:59.000 0 BDWL-39
9229 2008-03-09 22:22:55.000 2 BDWL-39
9229 2008-03-09 22:25:59.000 3 BDWL-39
9229 2008-03-09 22:27:55.000 4 BDWL-39
9229 2008-03-09 22:29:59.000 4 BDWL-39
9229 2008-03-09 22:31:55.000 5 BDWL-39

entonces el resultado obtenido en la nueva o misma tabla deberia quedar asi

Tabla: Prueba
id bus fechahora codstado patente
9029 2008-03-09 22:00:20.000 1 BDWL-39
9229 2008-03-09 22:18:59.000 0 BDWL-39
9229 2008-03-09 22:22:55.000 2 BDWL-39
9229 2008-03-09 22:25:59.000 3 BDWL-39
9229 2008-03-09 22:27:55.000 4 BDWL-39
9229 2008-03-09 22:31:55.000 5 BDWL-39

este ejemplo es solo para una patente BDWL-39 PERO TIENE QUE SE PARA TODAS.
SE ME OCURRE ALGO ASI COMO WHILE.

Solo quedan anotados los cambio de estado dentro de esa media hora si se mantien no se registra
como hago esa actualizacion por procedimiento almacenado

se que debo seleccionar la informacion buscar si existe si no se registra pero siempre que este en un nuevo estado.

ayuda porfavor.. de su amigo. mi [email protected] soy alumno en practica

alumnomedio 06/05/2008 08:17

Re: ayuda con esta query.
 
con esta query poblo la tabla prueba.

select distinct dbo.bus.patente, dbo.bus.idbus, dbo.historial_estadoactualbus.fechahora, isnull(dbo.historial_estadoactualbus.idlinea,0) as codestado
from dbo.bus
inner join dbo.historial_estadoactualbus
on dbo.historial_estadoactualbus.idbus = dbo.bus.idbus

order by dbo.bus.patente, fechahora

flaviovich 06/05/2008 09:41

Re: ayuda con esta query.
 
Mira, con esto ya tienes bastante, esta para que lo termines:
Código:

select distinct B.patente, B.idbus, H.fechahora, isnull(H.idlinea,0) [codestado]
into prueba
from bus B
inner join historial_estadoactualbus H on H.idbus=B.idbus
order by B.patente, H.fechahora

DECLARE
    @idbus int,
    @fechahora datetime,
    @codestado int,
    @fechabase datetime
    @codestant int,

DECLARE cr_chkHora CURSOR FOR
    select idbus, fechahora, codestado from prueba
FOR READ ONLY

OPEN cr_chkHora
FETCH NEXT FROM cr_chkHora INTO @idbus, @fechahora, @codestado

SELECT @fechabase = DATEADD(mi, -DATEPART(mi,@fechahora), @fechahora)
SELECT @fechabase = DATEADD(ss, -DATEPART(ss,@fechabase), @fechabase)
SELECT @codestant = @codestado

WHILE @@FETCH_STATUS = 0
BEGIN
    IF @fechahora < DATEADD(mi, 30, @fechabase)
    BEGIN
        FETCH NEXT FROM cr_chkHora INTO @idbus, @fechahora, @codestado
        SELECT @fechabase = DATEADD(mi, -DATEPART(mi,@fechahora), @fechahora)
        SELECT @fechabase = DATEADD(ss, -DATEPART(ss,@fechabase), @fechabase)
        IF @codestant = @codestado
            DELETE FROM prueba WHERE idbus=@idbus AND fechahora=@fechahora AND codestado=@codestado
    END
END

CLOSE cr_chkHora
DEALLOCATE cr_chkHora

No te acostumbres a que otros hagan tu tarea!

alumnomedio 06/05/2008 14:15

Re: ayuda con esta query.
 
gracias pero se me cae en la linea 14. eso si me puedes explicar mejor ya que nunca he usado cursores ahi se cae recuerda que toy en sql server 2005.


La zona horaria es GMT -6. Ahora son las 22:54.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.