Aunque el problema ya ha sido solucionado, hoy me he encontrado con
una situación que no alcanzo a comprender. No soy un usuario
experimentado de SQL Server, pero no encuentro nada que pueda explicar
el siguiente comportamiento:
Tengo una tabla y deseo saber el el valor máximo de una fecha para
varios registros. Dependiendo de como construya cierto índice, SQL
Server es capaz de localizar el registro. En el primer caso el campo
fecha se ordena ascendente y la instrucción SELECT no devuelve ningún
registro. Si el campo se indexa descendentemente lo encuentra sin
problema. Veamos:
CREATE NONCLUSTERED INDEX
[IX_PedidosComprasLineas_IdPedidoCompra_PclFechaPrevistaRecepcion_] ON
[dbo].[PedidosComprasLineas]
(
[IdPedidoCompra] ASC,
[PclFechaPrevistaRecepcion] DESC
)WITH FILLFACTOR = 90 ON [PRIMARY]
SELECT IdPedidoCompra, MAX(PclFechaPrevistaRecepcion) AS
FechaPrevistaRecepcion
FROM dbo.PedidosComprasLineas
GROUP BY IdPedidoCompra
HAVING (IdPedidoCompra B962)
IdPedidoCompra FechaPrevistaRecepcion
42962 NULL
Advertencia: valor NULL eliminado por el agregado u otra operación
SET.
(1 filas afectadas)
Sin embargo:
CREATE NONCLUSTERED INDEX
[IX_PedidosComprasLineas_IdPedidoCompra_PclFechaPrevistaRecepcion]
ON [dbo].[PedidosComprasLineas]
(
[IdPedidoCompra] ASC,
[PclFechaPrevistaRecepcion] ASC
)WITH FILLFACTOR = 90 ON [PRIMARY]
SELECT IdPedidoCompra, MAX(PclFechaPrevistaRecepcion) AS
FechaPrevistaRecepcion
FROM dbo.PedidosComprasLineas
GROUP BY IdPedidoCompra
HAVING (IdPedidoCompra B962)
IdPedidoCompra FechaPrevistaRecepcion
(0 filas afectadas)
¿Porqué ocurre esto?
Leer las respuestas