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

#6 Tomas Martin
12/04/2004 - 09:50 | Informe spam
Muchas gracias a los cuatro, el que más se ha acercado es Javier, 'CASI'
perfecto, pero esta consulta me devuelve unicamente las lineas de las
facturas 5 y 6 y la condición es que devuelva todas las lineas de 3
facturas. Es precisamente el problema que no se resolver: si en el
' JOIN (SELECT TOP 3 Factura ...' hay numeros de factura repetidos ya no
funciona pues pierde una factura por repetición.

TomásMM




"Javier Loria" escribió en el mensaje
news:OqGjD$
Hola Tomas:
1 Pregunta 4 respuestas, todas diferentes :(
Si entendi correctamente debe ser algo como:
==> 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'
ORDER BY Fecha DESC) AS FactSel
ON Tabla.Factura=FactSel.Factura
==> Esta sin probar y espero no haber cometido errores de sintaxis.
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>


wrote
in message news:
> 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
>
>


Respuesta Responder a este mensaje
#7 Miguel Egea
12/04/2004 - 10:29 | Informe spam
Estupendo tomás, la siguiente vez ayuda mucho si nos pones en lugar de un
ejemplo de los datos el script de como crearlos, es bastante más sencillo
conseguir lo que quieres sin tener que invertir un tiempo excesivo.
Entiendo que ya lo has solucionado, si no es así, cuentanos.


Saludos

Miguel Egea
Microsoft SQL-SERVER MVP
Brigada Anti-Cursores
http://www.portalsql.com

(Quita el online si me tienes que mandar un correo)
"Tomas Martin" <t o m a s m m [ARROBA] m i c r o v e n [punto] n e t>
escribió en el mensaje news:
Muchas gracias a los cuatro, el que más se ha acercado es Javier, 'CASI'
perfecto, pero esta consulta me devuelve unicamente las lineas de las
facturas 5 y 6 y la condición es que devuelva todas las lineas de 3
facturas. Es precisamente el problema que no se resolver: si en el
' JOIN (SELECT TOP 3 Factura ...' hay numeros de factura repetidos ya no
funciona pues pierde una factura por repetición.

TomásMM




"Javier Loria" escribió en el mensaje
news:OqGjD$
> Hola Tomas:
> 1 Pregunta 4 respuestas, todas diferentes :(
> Si entendi correctamente debe ser algo como:
> ==> > 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'
> ORDER BY Fecha DESC) AS FactSel
> ON Tabla.Factura=FactSel.Factura
> ==> > Esta sin probar y espero no haber cometido errores de sintaxis.
> 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>
wrote
> in message news:
> > 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
> >
> >
>
>


Respuesta Responder a este mensaje
#8 Tomas Martin
13/04/2004 - 09:32 | Informe spam
Tiene razón Miguel, aún no he conseguido que me funcione como deseo así que
ahí va la información por si podeis darle alguna vuelta más

CREATE TABLE [dbo].[Tabla] (
[Id] [int] IDENTITY (1, 1) NOT NULL ,
[Fecha] [smalldatetime] NOT NULL ,
[Factura] [int] NOT NULL ,
[Tipo] [char] (1) COLLATE Modern_Spanish_CI_AS NOT NULL
) ON [PRIMARY]
GO

Los datos para el test son:
1,2004-01-01 00:00:00,1,"X"
2,2004-02-01 00:00:00,1,"X"
3,2004-03-01 00:00:00,2,"O"
4,2004-04-01 00:00:00,5,"X"
5,2004-05-01 00:00:00,2,"O"
6,2004-06-01 00:00:00,3,"X"
7,2004-07-01 00:00:00,4,"O"
8,2004-08-01 00:00:00,5,"X"
9,2004-09-01 00:00:00,4,"O"
10,2004-10-01 00:00:00,5,"X"
11,2004-11-01 00:00:00,6,"X"
12,2004-12-01 00:00:00,6,"X"

thanks

Tomás Martín
Respuesta Responder a este mensaje
#9 Javier Loria
13/04/2004 - 13:49 | Informe spam
Hola Tomas:
Disculpa se me habia pasado tu posteo.
Prueba con (SELECT DISTINCT TOP 3 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:
Muchas gracias a los cuatro, el que más se ha acercado es Javier,
'CASI' perfecto, pero esta consulta me devuelve unicamente las lineas
de las facturas 5 y 6 y la condición es que devuelva todas las lineas
de 3 facturas. Es precisamente el problema que no se resolver: si en
el ' JOIN (SELECT TOP 3 Factura ...' hay numeros de factura
repetidos ya no funciona pues pierde una factura por repetición.

TomásMM




"Javier Loria" escribió en el mensaje
news:OqGjD$
Hola Tomas:
1 Pregunta 4 respuestas, todas diferentes :(
Si entendi correctamente debe ser algo como:
==>> 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'
ORDER BY Fecha DESC) AS FactSel
ON Tabla.Factura=FactSel.Factura
==>> Esta sin probar y espero no haber cometido errores de sintaxis.
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> wrote in message news:
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
Respuesta Responder a este mensaje
#10 Tomas Martin
13/04/2004 - 16:57 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida