SQL Server - Query que entrega la ultima factura de un producto

 
Vista:
sin imagen de perfil

Query que entrega la ultima factura de un producto

Publicado por fernando (5 intervenciones) el 05/08/2013 14:45:56
Estimados :
Tengo dos tablas :
Factura (nro.ate, coddoc, nrodoc, fecha_doc, estado)
Det_fact (nro.ate, coddoc, prod, precio)

Lo que necesito es sacar para cada uno de los productos(prod) cuales fue la ultima factura( nrodoc), su precio de venta (precio), y fecha del docto (fecha_doc), cuyo estado del docto (estado) sea = 7 y fecha docto sea <= 31-12-2012

Lo que hice fué ir a la tabla det_fact y sacar por cada producto el ultimo docto., lo que no se es como lo relaciono con la factura para sacar la fecha y el nro de docto., ya que al hacer un inner join se me repite el mismo producto en varios registros.


SELECT TOP (1) PERCENT MAX(nroate) AS atnr, prod as producto, precio
FROM dbo.det_fact
GROUP BY prod, precio
ORDER BY atnr DESC


Gracias

Fernando
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 63
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Query que entrega la ultima factura de un producto

Publicado por xve (102 intervenciones) el 05/08/2013 20:48:11
Hola Fernando, la manera de vincular dos tablas es con JOIN, pero tienen que tener un campo comun... por ejemplo, si nro.ate de las dos tablas es el valor que los vincula seria algo así:

SELECT * FROM Factura LEFT JOIN Det_fact ON Factura.nro.ate=Det_fact.nro.ate

Con esta instrucción te devolver todos los registros en un mismo row que el campo nro.ate sea el mismo.

Espero que te sirva... coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Query que entrega la ultima factura de un producto

Publicado por fernando (5 intervenciones) el 05/08/2013 21:21:27
Hola xve,
Gracias por responder, mira el problema es que la query me entrega mas de un registro por producto, que esta mal en la query?. Hice el ejemplo con un solo prod.

SELECT TOP (1) PERCENT MAX(fa.nrodoc), dtl.prod, MAX(fa.Fecha_Doc), dtl.precio
FROM det_fact INNER JOIN
fact ON det_fact .CajCod = fact.CajCod AND det_fact .DocCod = fact.DocCod AND
det_fact .AteNumRea = fact.AteNumRea
GROUP BY det_fact .BarCod, fact.AteFchDoc, det_fact .AtePrcBar
HAVING (fact.AteFchDoc <= CONVERT(DATETIME, '2012-12-31 00:00:00', 102)) AND (det_fact .BarCod = '111')
ORDER BY fact.AteFchDoc DESC

40928 111 2012-12-31 00:00:00.000 42850,0000
11615 111 2012-12-28 00:00:00.000 42850,0000
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 63
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Query que entrega la ultima factura de un producto

Publicado por xve (102 intervenciones) el 06/08/2013 10:04:41
Hola Fernando para agrupar, tendras que añadir el producto en el group by... algo así:
1
GROUP BY dtl.prod,det_fact .BarCod, fact.AteFchDoc, det_fact .AtePrcBar


No se si entendí bien tu pregunta... coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Query que entrega la ultima factura de un producto

Publicado por fernando (5 intervenciones) el 06/08/2013 14:48:15
XVE,
Perdón, está agrupado lo que pasa que el campo que dice barcod es igual a prod (para hacerlo mas comprensible en el ejemplo) , pero igual me arroja mas de un registro por producto.

SELECT TOP (1) PERCENT MAX(fa.nrodoc), dtl.prod, MAX(fa.Fecha_Doc), dtl.precio
FROM det_fact INNER JOIN
fact ON det_fact .CajCod = fact.CajCod AND det_fact .DocCod = fact.DocCod AND
det_fact .AteNumRea = fact.AteNumRea
GROUP BY det_fact .prod, fact.AteFchDoc, det_fact .AtePrcBar
HAVING (fact.AteFchDoc <= CONVERT(DATETIME, '2012-12-31 00:00:00', 102)) AND (det_fact .prod = '111')
ORDER BY fact.AteFchDoc DESC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias Islas Gonzalez
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Query que entrega la ultima factura de un producto

Publicado por Isaias Islas Gonzalez (4558 intervenciones) el 05/08/2013 21:18:36
Coincido con XVE, ¿como ligas o unes la tabla de FACTURA con DET_FACTURA?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Geri

Query que entrega la ultima factura de un producto

Publicado por Geri (17 intervenciones) el 06/08/2013 04:36:08
La solucion debe ser mas o menos asi:
1
2
3
4
5
6
SELECT *
FROM Factura
Outer Apply (Select Top 1 *
            From Det_fact
           Where Factura.nro.ate=Det_fact.nro.ate
           Order By Det_fact .ColumnaFecha Desc) DF;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Query que entrega la ultima factura de un producto

Publicado por fernando (5 intervenciones) el 06/08/2013 14:53:30
Geri,
Gracias por responder, pero el problema es que necesito sacar el ultimo precio de venta de los productos a una fecha determinada.

Saludos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Geri

Query que entrega la ultima factura de un producto

Publicado por Geri (17 intervenciones) el 06/08/2013 21:26:38
Fernando - puedes darnos un ejemplo de los datos,
y de la salida deseada?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Query que entrega la ultima factura de un producto

Publicado por fernando (5 intervenciones) el 06/08/2013 22:02:39
Geri :
Te adjunto la salida que despliega, me deberia desplegar solo el ultimo registro de venta :




nro. doc prod fecha_doc precio
40928 434504450017 2012-12-31 00:00:00.000 42850,0000
11615 434504450017 2012-12-28 00:00:00.000 42850,0000
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias Islas Gonzalez
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Query que entrega la ultima factura de un producto

Publicado por Isaias Islas Gonzalez (4558 intervenciones) el 07/08/2013 18:05:21
Debes primero hacer un CONJUNTO de los productos, ordenados por fechas.

SELECT MAX(prod), prod fecha FROM tutabla GROUP BY prod fecha

Una vez teniendo este grupo, o unes con TODO lo demas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Geri Réshef

Query que entrega la ultima factura de un producto

Publicado por Geri Réshef (17 intervenciones) el 07/08/2013 18:32:52
De tu ejemplo entiendo lo siguiente:
hay muchas filas, y estas dos son las ultimas (según la fecha) de nro=40928 y de nro=11615.

La recuperación puede ser así:
1
2
3
4
5
6
Select	*
From	MiTabla T1
Where	Not Exists (Select	1
		From	MiTabla T2
		Where	T2.nro=T1.nro
			And T2.fecha_doc>T1.fecha_doc);

No es lo más eficaz, pero espero que te sirva de ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar