Ayuda con una consulta

07/04/2004 - 09:55 por Tomas Martin | Informe spam
Tengo una tabla 'Ventas' con las columnas :

Fecha, Factura, tipo, .

Necesito montar una consulta (o SP) que me devuelva las filas de 'ventas' de
las tres últimas facturas (orden por fecha) anteriores a una fecha dada de
un tipo determinado

Ejemplo:
fecha factura Tipo
1 01/01 001 X
2 01/02 001 X
3 01/03 002 O
4 01/04 005 X
5 01/05 002 O
6 01/06 003 X
7 01/07 004 O
8 01/08 005 X
9 01/09 004 O
10 01/10 005 X
11 01/11 006 X
12 01/12 006 X
.

para la fecha >01/12 y tipo X me devolvería las filas: 12,11,10,8,6 y 4 ya
que las tres últimas facturas que cumplen la condicion son la 006,005 y 003

gracias

TomasMM

Preguntas similare

Leer las respuestas

#11 Javier Loria
13/04/2004 - 18:16 | Informe spam
Hola Tomas:
El SELECT DISTINCT TOP 3 se aplica unicamente a la linea que tiene
Factura
SELECT Tabla.fecha
, Tabla.Factura
, Tabla.Fecha
, Tabla.Tipo
FROM Tabla
JOIN (SELECT DISTINCT TOP 3 Factura
FROM Tabla
WHERE Fecha<='2004-01-12'
AND Tipo='X'
ORDER BY Fecha DESC) AS FactSel
ON Tabla.Factura=FactSel.Factura
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.
Tomas Martin <t o m a s m m [ARROBA] m i c r o v e n [punto] n e t>
escribio:
Hola Javier:
Cuando se especifica SELECT DISTINCT, los elementos de ORDER BY deben
aparecer en la lista de selección.
Y si añado 'Fecha' en la lista me devuelve los mismos resultados que
inicialmente ya que, aunque hay dos lineas con 'Factura=6', tienen
fechas distintas.

Tomás

"Javier Loria" escribió en el mensaje
news:
Hola Tomas:
Disculpa se me habia pasado tu posteo.
Prueba con (SELECT DISTINCT TOP 3 Factura ...)
Saludos,
Respuesta Responder a este mensaje
#12 Javier Loria
13/04/2004 - 18:59 | Informe spam
Hola Tomas:
Diculpa, no lei bien tu correo, y ahora entendi el problema.
Si cambias y en lugar de DISTINCT haces un GROUP BY? No estoy muy seguro
que funcione pero prueba:
=...
(SELECT TOP 3 Factura
FROM Tabla
WHERE Fecha<='2004-01-12'
AND Tipo='X'
GROUP BY Factura
ORDER BY MAX(Fecha) DESC)

== Suerte,

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.



Tomas Martin <t o m a s m m [ARROBA] m i c r o v e n [punto] n e t>
escribio:
Hola Javier:
Cuando se especifica SELECT DISTINCT, los elementos de ORDER BY deben
aparecer en la lista de selección.
Y si añado 'Fecha' en la lista me devuelve los mismos resultados que
inicialmente ya que, aunque hay dos lineas con 'Factura=6', tienen
fechas distintas.

Tomás

"Javier Loria" escribió en el mensaje
news:
Hola Tomas:
Disculpa se me habia pasado tu posteo.
Prueba con (SELECT DISTINCT TOP 3 Factura ...)
Saludos,
Respuesta Responder a este mensaje
#13 Tomas Martin
14/04/2004 - 09:31 | Informe spam
¡¡¡ B I N G O !!! Perfecto Javier. Funciona exactamente como yo deseaba.
Muchisimas gracias.
Dejo la sentencia definitiva por si alguien estaba siguiendo este hilo:

SELECT Tabla.fecha
, Tabla.Factura
, Tabla.Fecha
, Tabla.Tipo
FROM Tabla JOIN
(
SELECT TOP 3 Factura
FROM Tabla
WHERE Fecha<='2004-01-12' AND Tipo='X'
GROUP BY Factura
ORDER BY MAX(Fecha) DESC
)
AS FactSel
ON Tabla.Factura=FactSel.Factura

Tomás Martín

P.D.: Javier, una curiosidad. No acabo de entender el texto que pones bajo
tu firma ('Se aprecia la inclusión ...'). Lo podrías explicar?
Respuesta Responder a este mensaje
#14 Tomas Martin
14/04/2004 - 09:45 | Informe spam
¡¡¡ B I N G O !!! Perfecto Javier. Funciona exactamente como yo deseaba.
Muchisimas gracias.
Dejo la sentencia definitiva por si alguien estaba siguiendo este hilo:

SELECT Tabla.fecha
, Tabla.Factura
, Tabla.Fecha
, Tabla.Tipo
FROM Tabla JOIN
(
SELECT TOP 3 Factura
FROM Tabla
WHERE Fecha<='2004-01-12' AND Tipo='X'
GROUP BY Factura
ORDER BY MAX(Fecha) DESC
)
AS FactSel
ON Tabla.Factura=FactSel.Factura

Tomás Martín
Respuesta Responder a este mensaje
#15 Javier Loria
14/04/2004 - 17:12 | Informe spam
Hola Tomas:
Me alegro mucho que te funcione.
Lo de la firma es promoviendo a que los que posteen preguntas
relacionadas con T-SQL envien el codigo en SQL necesario para crear las
Tablas, Insertar filas, etc. que uno pueda copiar del mensaje y pegarlo en
el Query Analizer. Esto hace mas facil revisar la sintaxis de las respuestas
y probar que el resultado es el deseado.
Por ejemplo, hace poco Raul Romero envio el siguiente posteo:
==Raul Romero escribio:
Buenas tardes ...

Tengo una tabla como esta

CREATE TABLE [#Test]
(
[Col1] [int] NOT NULL ,
[Col2] [int] NULL ,
[Col3] [int] NULL
)

INSERT INTO [#test] ([col1],[col2],[col3])VALUES(1,100,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(2,101,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(3,101,1001)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(4,102,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(5,103,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(6,103,1004)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(7,103,1005)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(8,104,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(9,105,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(10,105,1007)

Quisiera obtener algo como esto ...

col1 col2 col3 Cuenta
1 100 null 1
2 101 null 2
3 101 1001 2
4 102 null 1
5 103 null 3
6 103 1004 3
7 103 1005 3
8 104 null 1
9 105 null 2
10 105 1007 2

Muchas gracias por su ayuda ...

Saludos,
Raul



== Es mas probable que esta pregunta sea respondida correctamente a la
primera, ya que no deja dudas a interpretaciones y cualquiera que quiera
constestar puede copiar el codigo pegarlo en el QA y hacer pruebas con
diferentes SELECT's. Por otra parte los que siguen el foro solo por
aprender sacan mas provecho de la pregunta.


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.

"Tomas Martin" <t o m a s m m [ARROBA] m i c r o v e n [punto] n e t> wrote
in message news:
¡¡¡ B I N G O !!! Perfecto Javier. Funciona exactamente como yo deseaba.
Muchisimas gracias.
Dejo la sentencia definitiva por si alguien estaba siguiendo este hilo:

SELECT Tabla.fecha
, Tabla.Factura
, Tabla.Fecha
, Tabla.Tipo
FROM Tabla JOIN
(
SELECT TOP 3 Factura
FROM Tabla
WHERE Fecha<='2004-01-12' AND Tipo='X'
GROUP BY Factura
ORDER BY MAX(Fecha) DESC
)
AS FactSel
ON Tabla.Factura=FactSel.Factura

Tomás Martín

P.D.: Javier, una curiosidad. No acabo de entender el texto que pones bajo
tu firma ('Se aprecia la inclusión ...'). Lo podrías explicar?


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida