Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

ayuda con esta query.

Estas en el tema de ayuda con esta query. en el foro de SQL Server en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 06/05/2008, 08:05
 
Fecha de Ingreso: mayo-2008
Mensajes: 4
Antigüedad: 16 años
Puntos: 0
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
  #2 (permalink)  
Antiguo 06/05/2008, 08:17
 
Fecha de Ingreso: mayo-2008
Mensajes: 4
Antigüedad: 16 años
Puntos: 0
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
  #3 (permalink)  
Antiguo 06/05/2008, 09:41
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
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!
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #4 (permalink)  
Antiguo 06/05/2008, 14:15
 
Fecha de Ingreso: mayo-2008
Mensajes: 4
Antigüedad: 16 años
Puntos: 0
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.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:52.