Consulta sin cursores

25/08/2005 - 11:25 por Mauricio Quiroz | Informe spam
Hola a todos, esribo por que necesito calcular intervalos de tiempo entre
filas consecutivas para un campo hora_ingreso de tipo datetime.
Al final la consulta debe devolver todos los intervalos superiores a 10 min.

Pude resolver el problema pero solo aplicando cursores y es demasiado lento.
La consulta implica recorrer como minimo 50.000 registros

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
25/08/2005 - 18:25 | Informe spam
Mauricio Quiroz,

Pudieras postear la estructura y unos datos de ejemplos, asi como el
resultado esperado?. Tratar de entender un problema basandose solamente en su
descripcion es dificil. Ademas, debemos usar nuestro tiempo para crear una
tabla, insertar unas filas y ver si la solucion propuesta se adapta al
resultado deseado. No crees que la ayuda debe ser mutua?

create table t1 (
pk int not null identity primary key,
dt datetime not null
)
go

insert into t1(dt) values(getdate())
insert into t1(dt) values(dateadd(minute, 11, getdate()))
insert into t1(dt) values(dateadd(minute, 22, getdate()))
insert into t1(dt) values(dateadd(minute, 23, getdate()))
insert into t1(dt) values(dateadd(minute, 25, getdate()))
go

select * from t1
go

select
a.pk as a_pk,
b.pk as b_pk,
datediff(minute, a.dt, b.dt) as diff_min
from
t1 as a
inner join
t1 as b
on b.pk = (select min(c.pk) from t1 as c where c.pk > a.pk)
where
datediff(minute, a.dt, b.dt) > 10
go

drop table t1
go


AMB

"Mauricio Quiroz" wrote:

Hola a todos, esribo por que necesito calcular intervalos de tiempo entre
filas consecutivas para un campo hora_ingreso de tipo datetime.
Al final la consulta debe devolver todos los intervalos superiores a 10 min.

Pude resolver el problema pero solo aplicando cursores y es demasiado lento.
La consulta implica recorrer como minimo 50.000 registros



Respuesta Responder a este mensaje
#2 Pablodegerli
25/08/2005 - 19:41 | Informe spam
"on b.pk = (select min(c.pk) from t1 as c where c.pk > a.pk) "
Esto lo habia tratado de hacer y no la pegaba, buenisimo, va para mi base de
conocimiento.
Muy bueno

"Alejandro Mesa" escribió en el
mensaje news:
Mauricio Quiroz,

Pudieras postear la estructura y unos datos de ejemplos, asi como el
resultado esperado?. Tratar de entender un problema basandose solamente en


su
descripcion es dificil. Ademas, debemos usar nuestro tiempo para crear una
tabla, insertar unas filas y ver si la solucion propuesta se adapta al
resultado deseado. No crees que la ayuda debe ser mutua?

create table t1 (
pk int not null identity primary key,
dt datetime not null
)
go

insert into t1(dt) values(getdate())
insert into t1(dt) values(dateadd(minute, 11, getdate()))
insert into t1(dt) values(dateadd(minute, 22, getdate()))
insert into t1(dt) values(dateadd(minute, 23, getdate()))
insert into t1(dt) values(dateadd(minute, 25, getdate()))
go

select * from t1
go

select
a.pk as a_pk,
b.pk as b_pk,
datediff(minute, a.dt, b.dt) as diff_min
from
t1 as a
inner join
t1 as b
on b.pk = (select min(c.pk) from t1 as c where c.pk > a.pk)
where
datediff(minute, a.dt, b.dt) > 10
go

drop table t1
go


AMB

"Mauricio Quiroz" wrote:

> Hola a todos, esribo por que necesito calcular intervalos de tiempo


entre
> filas consecutivas para un campo hora_ingreso de tipo datetime.
> Al final la consulta debe devolver todos los intervalos superiores a 10


min.
>
> Pude resolver el problema pero solo aplicando cursores y es demasiado


lento.
> La consulta implica recorrer como minimo 50.000 registros
>
>
>
Respuesta Responder a este mensaje
#3 Mauricio Quiroz
29/08/2005 - 15:30 | Informe spam
Ok, para la proxima sere mas especifico y detallado en mi consulta por ahora
con tu respuesta me es sufuciente, muchas gracias.

"Alejandro Mesa" escribió en el
mensaje news:
Mauricio Quiroz,

Pudieras postear la estructura y unos datos de ejemplos, asi como el
resultado esperado?. Tratar de entender un problema basandose solamente en


su
descripcion es dificil. Ademas, debemos usar nuestro tiempo para crear una
tabla, insertar unas filas y ver si la solucion propuesta se adapta al
resultado deseado. No crees que la ayuda debe ser mutua?

create table t1 (
pk int not null identity primary key,
dt datetime not null
)
go

insert into t1(dt) values(getdate())
insert into t1(dt) values(dateadd(minute, 11, getdate()))
insert into t1(dt) values(dateadd(minute, 22, getdate()))
insert into t1(dt) values(dateadd(minute, 23, getdate()))
insert into t1(dt) values(dateadd(minute, 25, getdate()))
go

select * from t1
go

select
a.pk as a_pk,
b.pk as b_pk,
datediff(minute, a.dt, b.dt) as diff_min
from
t1 as a
inner join
t1 as b
on b.pk = (select min(c.pk) from t1 as c where c.pk > a.pk)
where
datediff(minute, a.dt, b.dt) > 10
go

drop table t1
go


AMB

"Mauricio Quiroz" wrote:

> Hola a todos, esribo por que necesito calcular intervalos de tiempo


entre
> filas consecutivas para un campo hora_ingreso de tipo datetime.
> Al final la consulta debe devolver todos los intervalos superiores a 10


min.
>
> Pude resolver el problema pero solo aplicando cursores y es demasiado


lento.
> La consulta implica recorrer como minimo 50.000 registros
>
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida