Problema con clausula group by

27/08/2004 - 14:36 por Juan Melas | Informe spam
Necesito de una tabla de compras, seleccionar la última compra, tengo 2
tablas, una de detalles(la tabla Compras) y otra de encabezados(la Tabla
Ivacomp) de la cual tomo la fecha, el problema se me presenta cuando tengo
más de un registro correspondiente a un determinado artículo en la misma
fecha, no logro que me devuelva un registro único por cada artículo.Utilizo
la sentencia que va al pie en SP pero al hacer el join en los artículos en
los que tengo más de una compra el mismo día me devuelve más de un registro
por artículo, probé poniendo la clausula Distinct pero no me funciona.


(SELECT TOP 100 PERCENT a.Codigo, b.fecha, a.Precio
FROM dbo.Compras a INNER JOIN
dbo.Ivacomp ON a.IdIvacomp = dbo.Ivacomp.IdIvacomp
INNER JOIN
(SELECT
dbo.Compras.Codigo,MAX(dbo.Ivacomp.Fecha) AS fecha
FROM dbo.Compras INNER JOIN
dbo.Ivacomp ON dbo.Compras.IdIvacomp = dbo.Ivacomp.IdIvacomp
where ivacomp.fecha<=?hasta
GROUP BY dbo.Compras.Codigo) b ON a.Codigo = b.Codigo AND
dbo.Ivacomp.Fecha = b.fecha

Preguntas similare

Leer las respuestas

#1 Maxi
27/08/2004 - 14:48 | Informe spam
Hola, quizas esto te sea util.


SELECT TOP 100 PERCENT a.Codigo, max(b.fecha) as fecha, a.Precio
FROM dbo.Compras a INNER JOIN
dbo.Ivacomp ON a.IdIvacomp = dbo.Ivacomp.IdIvacomp
INNER JOIN
(SELECT
dbo.Compras.Codigo,MAX(dbo.Ivacomp.Fecha) AS fecha
FROM dbo.Compras INNER JOIN
dbo.Ivacomp ON dbo.Compras.IdIvacomp = dbo.Ivacomp.IdIvacomp
where ivacomp.fecha<=?hasta
GROUP BY dbo.Compras.Codigo) b ON a.Codigo = b.Codigo AND
dbo.Ivacomp.Fecha = b.fecha
GROUP BY A.CODIGO,A.PRECIO

Un abrazo



Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Juan Melas" escribió en el mensaje
news:%
Necesito de una tabla de compras, seleccionar la última compra, tengo 2
tablas, una de detalles(la tabla Compras) y otra de encabezados(la Tabla
Ivacomp) de la cual tomo la fecha, el problema se me presenta cuando tengo
más de un registro correspondiente a un determinado artículo en la misma
fecha, no logro que me devuelva un registro único por cada


artículo.Utilizo
la sentencia que va al pie en SP pero al hacer el join en los artículos en
los que tengo más de una compra el mismo día me devuelve más de un


registro
por artículo, probé poniendo la clausula Distinct pero no me funciona.


(SELECT TOP 100 PERCENT a.Codigo, b.fecha, a.Precio
FROM dbo.Compras a INNER JOIN
dbo.Ivacomp ON a.IdIvacomp = dbo.Ivacomp.IdIvacomp
INNER JOIN
(SELECT
dbo.Compras.Codigo,MAX(dbo.Ivacomp.Fecha) AS fecha
FROM dbo.Compras INNER JOIN
dbo.Ivacomp ON dbo.Compras.IdIvacomp = dbo.Ivacomp.IdIvacomp
where ivacomp.fecha<=?hasta
GROUP BY dbo.Compras.Codigo) b ON a.Codigo = b.Codigo AND
dbo.Ivacomp.Fecha = b.fecha








Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.740 / Virus Database: 494 - Release Date: 16/08/2004
Respuesta Responder a este mensaje
#2 Javier Loria
27/08/2004 - 14:51 | Informe spam
Hola Juan:
Necesitas algun criterio para seleccionar la "ultima compra", si la
fecha no es suficiente si hay varias compras el mismo dia del mismo
producto, cual seria el criterio para seleccionar la ultima compra?
Me parece que en tu ejemplo IDIvaComp es un consecutivo, si es asi
podrias reemplazar el Fecha por el IDIvaComp y usarlo en la SubConsulta para
filtrar las filas.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda
"Juan Melas" wrote in message
news:#
Necesito de una tabla de compras, seleccionar la última compra, tengo 2
tablas, una de detalles(la tabla Compras) y otra de encabezados(la Tabla
Ivacomp) de la cual tomo la fecha, el problema se me presenta cuando tengo
más de un registro correspondiente a un determinado artículo en la misma
fecha, no logro que me devuelva un registro único por cada


artículo.Utilizo
la sentencia que va al pie en SP pero al hacer el join en los artículos en
los que tengo más de una compra el mismo día me devuelve más de un


registro
por artículo, probé poniendo la clausula Distinct pero no me funciona.


(SELECT TOP 100 PERCENT a.Codigo, b.fecha, a.Precio
FROM dbo.Compras a INNER JOIN
dbo.Ivacomp ON a.IdIvacomp = dbo.Ivacomp.IdIvacomp
INNER JOIN
(SELECT
dbo.Compras.Codigo,MAX(dbo.Ivacomp.Fecha) AS fecha
FROM dbo.Compras INNER JOIN
dbo.Ivacomp ON dbo.Compras.IdIvacomp = dbo.Ivacomp.IdIvacomp
where ivacomp.fecha<=?hasta
GROUP BY dbo.Compras.Codigo) b ON a.Codigo = b.Codigo AND
dbo.Ivacomp.Fecha = b.fecha



Respuesta Responder a este mensaje
#3 Juan Melas
27/08/2004 - 16:12 | Informe spam
Probé asi pero me da el mismo resultado, creo que el problema es que en el
campo fecha la hora está como 12:00 AM por lo que dos facturas de un mismo
producto el mismo día tienen el mismo valor en el campo fecha.

Gracias.

"Maxi" escribió en el mensaje
news:e4%
Hola, quizas esto te sea util.


SELECT TOP 100 PERCENT a.Codigo, max(b.fecha) as fecha, a.Precio
FROM dbo.Compras a INNER JOIN
dbo.Ivacomp ON a.IdIvacomp = dbo.Ivacomp.IdIvacomp
INNER JOIN
(SELECT
dbo.Compras.Codigo,MAX(dbo.Ivacomp.Fecha) AS fecha
FROM dbo.Compras INNER JOIN
dbo.Ivacomp ON dbo.Compras.IdIvacomp = dbo.Ivacomp.IdIvacomp
where ivacomp.fecha<=?hasta
GROUP BY dbo.Compras.Codigo) b ON a.Codigo = b.Codigo AND
dbo.Ivacomp.Fecha = b.fecha
GROUP BY A.CODIGO,A.PRECIO

Un abrazo



Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Juan Melas" escribió en el mensaje
news:%
> Necesito de una tabla de compras, seleccionar la última compra, tengo 2
> tablas, una de detalles(la tabla Compras) y otra de encabezados(la Tabla
> Ivacomp) de la cual tomo la fecha, el problema se me presenta cuando


tengo
> más de un registro correspondiente a un determinado artículo en la misma
> fecha, no logro que me devuelva un registro único por cada
artículo.Utilizo
> la sentencia que va al pie en SP pero al hacer el join en los artículos


en
> los que tengo más de una compra el mismo día me devuelve más de un
registro
> por artículo, probé poniendo la clausula Distinct pero no me funciona.
>
>
> (SELECT TOP 100 PERCENT a.Codigo, b.fecha, a.Precio
> FROM dbo.Compras a INNER JOIN
> dbo.Ivacomp ON a.IdIvacomp = dbo.Ivacomp.IdIvacomp
> INNER JOIN
> (SELECT
> dbo.Compras.Codigo,MAX(dbo.Ivacomp.Fecha) AS fecha
> FROM dbo.Compras INNER JOIN
> dbo.Ivacomp ON dbo.Compras.IdIvacomp = dbo.Ivacomp.IdIvacomp
> where ivacomp.fecha<=?hasta
> GROUP BY dbo.Compras.Codigo) b ON a.Codigo = b.Codigo AND
> dbo.Ivacomp.Fecha = b.fecha
>
>
>



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.740 / Virus Database: 494 - Release Date: 16/08/2004


Respuesta Responder a este mensaje
#4 Juan Melas
27/08/2004 - 16:59 | Informe spam
Siguiendo tu consejo utilice el campo Idcompra para hacer el join con la
subconsulta, autoincremental en la tabla compras y aparentemente funciona.La
parte correspondiente del SP quedo asi.



(SELECT TOP 100 PERCENT a.Codigo,b.fecha as fecha, a.Precio

FROM dbo.Compras a INNER JOIN

dbo.Ivacomp ON a.IdIvacomp = dbo.Ivacomp.IdIvacomp INNER JOIN

(SELECT dbo.Compras.Codigo,

MAX(dbo.Ivacomp.Fecha) AS fecha,

Max(dbo.compras.idcompra)as idcompra

FROM dbo.Compras INNER JOIN

dbo.Ivacomp ON dbo.Compras.IdIvacomp = dbo.Ivacomp.IdIvacomp

where ivacomp.fecha<=@hasta

GROUP BY dbo.Compras.Codigo) b ON a.Codigo = b.Codigo AND dbo.Ivacomp.Fecha
= b.fecha

and a.idcompra=b.idcompra

ORDER BY a.Codigo)



Gracias

"Javier Loria" escribió en el mensaje
news:
Hola Juan:
Necesitas algun criterio para seleccionar la "ultima compra", si la
fecha no es suficiente si hay varias compras el mismo dia del mismo
producto, cual seria el criterio para seleccionar la ultima compra?
Me parece que en tu ejemplo IDIvaComp es un consecutivo, si es asi
podrias reemplazar el Fecha por el IDIvaComp y usarlo en la SubConsulta


para
filtrar las filas.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda
"Juan Melas" wrote in message
news:#
> Necesito de una tabla de compras, seleccionar la última compra, tengo 2
> tablas, una de detalles(la tabla Compras) y otra de encabezados(la Tabla
> Ivacomp) de la cual tomo la fecha, el problema se me presenta cuando


tengo
> más de un registro correspondiente a un determinado artículo en la misma
> fecha, no logro que me devuelva un registro único por cada
artículo.Utilizo
> la sentencia que va al pie en SP pero al hacer el join en los artículos


en
> los que tengo más de una compra el mismo día me devuelve más de un
registro
> por artículo, probé poniendo la clausula Distinct pero no me funciona.
>
>
> (SELECT TOP 100 PERCENT a.Codigo, b.fecha, a.Precio
> FROM dbo.Compras a INNER JOIN
> dbo.Ivacomp ON a.IdIvacomp = dbo.Ivacomp.IdIvacomp
> INNER JOIN
> (SELECT
> dbo.Compras.Codigo,MAX(dbo.Ivacomp.Fecha) AS fecha
> FROM dbo.Compras INNER JOIN
> dbo.Ivacomp ON dbo.Compras.IdIvacomp = dbo.Ivacomp.IdIvacomp
> where ivacomp.fecha<=?hasta
> GROUP BY dbo.Compras.Codigo) b ON a.Codigo = b.Codigo AND
> dbo.Ivacomp.Fecha = b.fecha
>
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida