Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > SQL Server

Respuesta
 
Herramientas Desplegado
Antiguo 06-may-2008, 08:05   #1 (permalink)
alumnomedio ha deshabilitado el karma
 
Fecha de Ingreso: mayo-2008
Mensajes: 4
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 sponsermx@hotmail.com soy alumno en practica
alumnomedio está desconectado   Responder Citando
Antiguo 06-may-2008, 08:17   #2 (permalink)
alumnomedio ha deshabilitado el karma
 
Fecha de Ingreso: mayo-2008
Mensajes: 4
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
alumnomedio está desconectado   Responder Citando
Antiguo 06-may-2008, 09:41   #3 (permalink)
flaviovich está en el buen camino
 
Avatar de flaviovich
 
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 1.259
Enviar un mensaje por ICQ a flaviovich Enviar un mensaje por MSN a flaviovich Enviar un mensaje por Skype™ a flaviovich
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.
flaviovich está desconectado   Responder Citando
Antiguo 06-may-2008, 14:15   #4 (permalink)
alumnomedio ha deshabilitado el karma
 
Fecha de Ingreso: mayo-2008
Mensajes: 4
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.
alumnomedio está desconectado   Responder Citando
Respuesta

Calificación: Calificación de Tema: 1 votos, 3,00 de promedio.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 08:58.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93