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

Consulta fechas

Estas en el tema de Consulta fechas en el foro de SQL Server en Foros del Web. Hola que tal, tengo el sig el problema en el store procedure tengo el sig. codigo, el problema es el sguiente cuando hago la consulta ...
  #1 (permalink)  
Antiguo 28/02/2012, 12:40
 
Fecha de Ingreso: enero-2011
Mensajes: 8
Antigüedad: 13 años, 3 meses
Puntos: 0
Consulta fechas

Hola que tal, tengo el sig el problema en el store procedure tengo el sig. codigo, el problema es el sguiente cuando hago la consulta por rango de fechas de manera directa que es la linea que tengo comentada en la clausula WHERE lo hace rapido pero cuando le paso las variables de tipo date y convierto el campo como tipo de date que es la sig linea de codigo que no esta comentada se tarda muchisimo mas tiempo, con el mismo rango de fechas si alguien me podria ayudar se los agradecere gracias

Declare @dFechaIni date,
@dFechaFin date

set @dFechaIni =CONVERT(DATE,DATEADD(MONTH, -1, GETDATE()),103)
set @dFechaFin =CONVERT(DATE,GETDATE(),103)

Declare @dFechaIniD2 DATE,
@dFechaFinD2 DATE

set @dFechaIniD2=@dFechaIni
set @dFechaFinD2 =@dFechaFin

SELECT @dFechaIniD2
SELECT @dFechaFinD2



SELECT
NOP.IDNumOficioProgramas, -- idNumOficioPrograma,
ISNULL(NOP.sNumOficio,'SIN NÚMERO'), -- [Nombre o Número Plan],
NOP.sTipoPrograma, -- [Programa],
PD.sClave, -- [Clave],
C.sTipo, -- [Sub Almacén]
ISNULL(PD.ICANTIDAD,0), -- [Piezas Embarcadas],
NOP.iCantidadOriginalSinRedondeo, -- [Piezas Solicitadas],
PDETO.ICANTIDAD, -- [PiezasPlaneadas]
ISNULL(PD.ICANTIDAD-NOP.iCantidadOriginalSinRedondeo,0), -- [Diferencia],

CASE C.sTipo
WHEN 'MEDICAMENTO' THEN '100-'
WHEN 'MATERIAL DE CURACION' THEN '200-'
WHEN 'REFRIGERADO' THEN '300-'
WHEN 'CONTROLADO' THEN '400-'
WHEN 'ALTA ESPECIALIDAD' THEN '500-'
END + CAST(P.IDPedidos AS VARCHAR), -- [Pedido Mirafe],

ISNULL(PRAD.iCantidad,0), -- [Cantidad Recibida],
--PTT.IDRemision, -- [Folio ISSSTE Remisión],
--0, -- [Porcentaje Cumplimiento],
0, -- [SUMA SOLICITADAS ANTERIORES]
0 -- [SUMA PLANEADAS ANTERIORES]

from Pedidos [P]

INNER JOIN (
SELECT IDPEDIDOS, SCLAVE, SUM(ICANTIDAD) AS ICANTIDAD FROM PedidosDetalle
GROUP BY IDPedidos, sClave
) [PD] on PD.IDPedidos=P.IDPedidos

INNER JOIN (
SELECT IDPEDIDOS, SCLAVE, SUM(ICANTIDAD) AS ICANTIDAD
FROM PedidosDetalleOriginal
GROUP BY IDPedidos, sClave
) PDETO ON PDETO.IDPedidos=P.IDPedidos AND PDETO.sClave=PD.sClave

INNER JOIN Claves [C] on C.sClave=PD.sClave

INNER JOIN NumOficioProgramas as NOP on NOP.idpedidos=P.IDPedidos and NOP.sclave=PD.sClave


INNER JOIN (
select IDRemision as IDRemision, sTipo,MAX(IDODT) AS IDODT
from ODTDetalle
group by IDRemision, sTipo
) AS OD ON OD.idRemision=P.IDPedidos AND OD.sTipo=C.sTipo

INNER JOIN ODT ON ODT.IDODT=OD.IDODT

LEFT JOIN PedidosRecibidosANS [PRA] on PRA.IDPedidos=P.IDPedidos AND PRA.sTipo=C.sTipo --AND PRA.PreRecibido > 0

LEFT JOIN PedidosRecibidosANSDetalle [PRAD] on PRAD.IDPedidosRecibidosANS=PRA.IDPedidosRecibidosA NS AND PD.sClave = PRAD.sClave

WHERE P.IDCatalogoCategoriaPedidos in(2,4,5)
AND P.bPrograma = 'true'
--AND ODT.dfechaSalida between CONVERT(DATE,'2012-01-28') AND CONVERT(DATE,'2012-02-28')
AND CONVERT(DATE,ODT.dfechaSalida) between @dFechaIniD2 AND @dFechaFinD2
AND P.bCancelado=0
AND NOP.sNumOficio like 'DADAE%'
  #2 (permalink)  
Antiguo 28/02/2012, 13:55
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Consulta fechas

¿dfechaSalida es INDICE?

AND ODT.dfechaSalida >= '20120128' AND ODT.dfechaSalida <= '20120228'
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 28/02/2012, 14:00
 
Fecha de Ingreso: enero-2011
Mensajes: 8
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Consulta fechas

No es indice, el campo es de tipo datetime no null alguna idea????
  #4 (permalink)  
Antiguo 28/02/2012, 14:01
 
Fecha de Ingreso: enero-2011
Mensajes: 8
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Consulta fechas

Cita:
Iniciado por iislas Ver Mensaje
¿dfechaSalida es INDICE?

AND ODT.dfechaSalida >= '20120128' AND ODT.dfechaSalida <= '20120228'
No es indice, el campo es de tipo datetime no null alguna idea????
  #5 (permalink)  
Antiguo 28/02/2012, 14:02
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Consulta fechas

Bueno, ya te conteste, GENERA UN INDICE por el campo y NUNCA HAGAS convert sobre los campos de tu tabla en el where, ya que esto, inhibe la utilizacion de indices.

No compares las fechas con BETWEEN, utiliza >= y <=
__________________
MCTS Isaias Islas
  #6 (permalink)  
Antiguo 28/02/2012, 14:11
 
Fecha de Ingreso: enero-2011
Mensajes: 8
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Consulta fechas

Cita:
Iniciado por sayo_slp Ver Mensaje
No es indice, el campo es de tipo datetime no null alguna idea????
Agrege la linea y lo que hice fue castear el campo a date pero de todos modos se queda colgando la consulta alguna idea

AND CAST(ODT.dfechaSalida AS DATE) >= @dFechaIniD2 AND CAST(ODT.dfechaSalida AS DATE) <= @dFechaFinD2
  #7 (permalink)  
Antiguo 28/02/2012, 14:14
 
Fecha de Ingreso: enero-2011
Mensajes: 8
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Consulta fechas

Cita:
Iniciado por iislas Ver Mensaje
Bueno, ya te conteste, GENERA UN INDICE por el campo y NUNCA HAGAS convert sobre los campos de tu tabla en el where, ya que esto, inhibe la utilizacion de indices.

No compares las fechas con BETWEEN, utiliza >= y <=

ok de antemano muchas gracias men deja lo pruebo ya llevo rato peleandome con esto
  #8 (permalink)  
Antiguo 28/02/2012, 16:22
 
Fecha de Ingreso: enero-2011
Mensajes: 8
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Consulta fechas

Cita:
Iniciado por iislas Ver Mensaje
Bueno, ya te conteste, GENERA UN INDICE por el campo y NUNCA HAGAS convert sobre los campos de tu tabla en el where, ya que esto, inhibe la utilizacion de indices.

No compares las fechas con BETWEEN, utiliza >= y <=

Genere el indice en el campo de la fecha y no lo consulto con BETWEEN lo utilizo con >= <= y tengo el mismo resultado se sige tardando la consulta
  #9 (permalink)  
Antiguo 28/02/2012, 21:29
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Consulta fechas

Muestrame el puro WHERE

Y ejecutas SP_HELP tutabla -- substityes por el nombre de tu tabla

Muestrame la parte de INDICES
__________________
MCTS Isaias Islas
  #10 (permalink)  
Antiguo 28/02/2012, 21:45
 
Fecha de Ingreso: enero-2011
Mensajes: 8
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Consulta fechas

Cita:
Iniciado por iislas Ver Mensaje
Muestrame el puro WHERE

Y ejecutas SP_HELP tutabla -- substityes por el nombre de tu tabla

Muestrame la parte de INDICES
Mi estimado ya pude resolver el problema, por lo general no me gusta mucho pedir ayuda ya que siempre trato de resolver el problema por mi mismo pero ya me urgia entregar esto en le chamba, me estaba comiendo el tiempo, muchisimas gracias mmmm pero si me diste la idea y con eso fue suficiente

Etiquetas: fecha, select, campos
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




La zona horaria es GMT -6. Ahora son las 03:06.