none
Inicio y fin de un ciclo RRS feed

  • Pregunta

  • Buenos dias 

    Tengo un problema similar que hace tiempo expuse pero este es diferente lo que pasa es lo siguiente :

    Tengo que sacar en donde empieza y donde termina los 1 en este caso empieza a las 07:40:26 y termina 07:59:54, los otros unos no se cuentan ya no es un ciclo completo , un ciclo completo empieza de 0 a otro 0

    Resultado esperado 

    FechaInicio                          FechaFin

    2019-11-25  07:40:26       2019-11-25 07:59:54

    aqui otro ejemplo

    Ese ciclo empieza de las 00:37:41  y termina 01:37:39 

    Entonces el resultado esperado seria esto

      FechaInicio                      FechaFin     

    2019-11-26 00:37:41      2019-11-26 01:00:28

    2019-11-26 01:0028       2019-11-26 01:37:39

    Otro ejemplo

    

    De antemano se los agradeceria su apoyo 


    Pregunta


    • Editado Dave2203 jueves, 5 de diciembre de 2019 6:36
    jueves, 5 de diciembre de 2019 6:36

Respuestas

Todas las respuestas

  • Deleted
    • Propuesto como respuesta Diana AcuñaModerator jueves, 5 de diciembre de 2019 15:41
    • Votado como útil Dave2203 jueves, 5 de diciembre de 2019 15:54
    • Propuesto como respuesta Pablo RubioModerator jueves, 5 de diciembre de 2019 16:34
    • Votado como útil Dave2203 jueves, 5 de diciembre de 2019 17:22
    jueves, 5 de diciembre de 2019 8:52
  • Buenos dias, que tal , ya aplique la sugerencia en los demas casos , pero en este caso en particular no me sale ya que el final llega ahi donde esta marcado,

    codigo

    ;WITH 
    Prox as (
    SELECT *,
       lead (TIMESTAMP) over (order by Extra) as proxTS,
       lead (SensorValue) over (order by Extra) as proxValue,
       lead (Extra) over (order by Extra) as proxExtra
      from
         (
       SELECT *,ROW_NUMBER() OVER (ORDER BY idVBox) Extra
         FROM @Order
     
    ) A
    ),
    Empieza_Fin as (
    SELECT case when (sensorValue = 0 and proxValue = 1) 
    then proxExtra 
    else Extra end as Extra,
       TIMESTAMP,
       case when (sensorValue = 0 and proxValue = 1) 
      then 'E' 
    else 'F' end as Accion
      from Prox
      where TIMESTAMP = proxTS
    and ((sensorValue = 0 and proxValue = 1)
    or (sensorValue = 1 and proxValue = 0))
    ),
    Rango as (
    SELECT E.Extra as E1, F.Extra as E2
      from Empieza_Fin as E
       outer apply (SELECT top (1) *
      from Empieza_Fin as EF
      where EF.Accion = 'F'
    and EF.Extra > E.Extra
      order by EF.Extra) as F
      where E.Accion = 'E'
    )
    SELECT P.TIMESTAMP as FechaInicio, P.proxTS as FechaFin
      from Prox as P
       cross join Rango as R
      where P.Extra >= R.E1 
    and P.Extra < R.E2
      order by P.Extra; 


    Pregunta


    • Editado Dave2203 jueves, 5 de diciembre de 2019 15:30 Falto imagen
    • Propuesto como respuesta Pablo RubioModerator jueves, 5 de diciembre de 2019 16:34
    • Votado como útil Dave2203 jueves, 5 de diciembre de 2019 16:53
    • Propuesto como respuesta Pablo RubioModerator jueves, 5 de diciembre de 2019 18:20
    jueves, 5 de diciembre de 2019 15:12
  • Deleted
    • Marcado como respuesta Dave2203 jueves, 5 de diciembre de 2019 20:04
    • Desmarcado como respuesta Dave2203 jueves, 5 de diciembre de 2019 20:04
    jueves, 5 de diciembre de 2019 18:46
  • Si efectivamente perdon por tantas molestias 


    Pregunta

    jueves, 5 de diciembre de 2019 20:07
  • Deleted
    • Marcado como respuesta Dave2203 jueves, 5 de diciembre de 2019 22:10
    jueves, 5 de diciembre de 2019 20:41
  • Lo probare !! 

    Pregunta


    • Editado Dave2203 jueves, 5 de diciembre de 2019 21:11
    jueves, 5 de diciembre de 2019 21:10
  • Muchisimas gracias !! Abri otra pregunta ver si me puede ayudar con algo que he dejado pasar por tiempo y no lo he podido solucionar 

    Pregunta

    jueves, 5 de diciembre de 2019 22:14
  • Para mi seria mejor :

    declare @tipo table (
    consecutivo int identity(1,1),  --- con el fin de tener una opcion de orden
    timestamp datetime not null,
    value smallint not null)

     ---insertas respetando el orden
    insert into @tipo(timestamp,value )
    select  timestamp,value from [tabla];

    ;with dos as(
    select  timestamp as fechaini,value ,lead(value ,1,0) over(order by consecutivo) as valuesiguiente,

    lead(timestamp) over(order by consecutivo) as fechafin from @tipo)
    select  fechaini,fechafin from dos where  value = 1 and value = valuesiguiente;

    ---creo que es la opcion mas sencilla


    • Editado Hacerdan jueves, 5 de diciembre de 2019 22:41 correccion
    • Propuesto como respuesta kmxh jueves, 5 de diciembre de 2019 22:58
    jueves, 5 de diciembre de 2019 22:39
  • Deleted
    jueves, 5 de diciembre de 2019 23:03