Consulta SQL

22/06/2004 - 22:58 por Anonimo | Informe spam
Amigos foreros:

Despues de mucho tiempo, me reincorporo a los foros (antes aparecia como
hmuniz@tutopia.com).
Tengo una consulta con los siguientes datos:

DATEGENERATED ITEMNUM VENDORID UNITCOST
02/04/2004 14-010-000054E 001881 $ 0.21
02/04/2004 14-010-002007L 001881 $ 1.66
02/04/2004 14-010-002015L 001881 $ 0.12
03/04/2004 14-010-002015L 001881 $ 0.15

...

Lo que necesito es, para cada ITEMNUM, buscar el siguiente y, si UNITCOST es
mayor a un 5% del valor del anterior, lo mande a la consulta...

... seria una cosa asi:

ITEMNUM DATE1 VENDOR1 COST1 DATE2 VENDOR2 COST2
PORC
14-010-002015L 02/04/2004 001881 $ 0.12 03/04/2004 001881 $ 0.15
25.00%

...

Es posible hacerlo mediante una subconsulta? O tengo que generar el codigo
correspondiente?Espero haberme hecho entender. Gracias desde ahora.

Julio.

"Para triunfar, el mero planteamiento inicial no basta. También hay que
improvisar."
(Salvor Hardin)

Preguntas similare

Leer las respuestas

#1 MAXI
23/06/2004 - 04:32 | Informe spam
Hola, lo que no entiendo es que buscas? o sea, vos queres en una sola linea
traer el valor del item y el valor que le sigue? o solo traer el valor que
le sigue si es mayor al 5% con respecto al valor que tenes?

Suerte




Maxi

Buenos Aires - Argentina

Desarrollador .NET 3 Estrellas

Mail: Maxi_accotto[arroba]speedy.com.ar

MSN:


escribió en el mensaje
news:ubZB%
Amigos foreros:

Despues de mucho tiempo, me reincorporo a los foros (antes aparecia como
).
Tengo una consulta con los siguientes datos:

DATEGENERATED ITEMNUM VENDORID UNITCOST
02/04/2004 14-010-000054E 001881 $ 0.21
02/04/2004 14-010-002007L 001881 $ 1.66
02/04/2004 14-010-002015L 001881 $ 0.12
03/04/2004 14-010-002015L 001881 $ 0.15

...

Lo que necesito es, para cada ITEMNUM, buscar el siguiente y, si UNITCOST


es
mayor a un 5% del valor del anterior, lo mande a la consulta...

... seria una cosa asi:

ITEMNUM DATE1 VENDOR1 COST1 DATE2 VENDOR2 COST2
PORC
14-010-002015L 02/04/2004 001881 $ 0.12 03/04/2004 001881 $ 0.15
25.00%

...

Es posible hacerlo mediante una subconsulta? O tengo que generar el codigo
correspondiente?Espero haberme hecho entender. Gracias desde ahora.

Julio.

"Para triunfar, el mero planteamiento inicial no basta. También hay que
improvisar."
(Salvor Hardin)


Respuesta Responder a este mensaje
#2 Anonimo
23/06/2004 - 13:19 | Informe spam
La idea es generar el registro solamente cuando se cumpla la condicion de
que el valor que le sigue sea mayor al 5% del anterior. Sino, no generarlo.

"MAXI" escribió en el mensaje
news:
Hola, lo que no entiendo es que buscas? o sea, vos queres en una sola


linea
traer el valor del item y el valor que le sigue? o solo traer el valor que
le sigue si es mayor al 5% con respecto al valor que tenes?

Suerte




Maxi

Buenos Aires - Argentina

Desarrollador .NET 3 Estrellas

Mail: Maxi_accotto[arroba]speedy.com.ar

MSN:


escribió en el mensaje
news:ubZB%
> Amigos foreros:
>
> Despues de mucho tiempo, me reincorporo a los foros (antes aparecia como
> ).
> Tengo una consulta con los siguientes datos:
>
> DATEGENERATED ITEMNUM VENDORID UNITCOST
> 02/04/2004 14-010-000054E 001881 $ 0.21
> 02/04/2004 14-010-002007L 001881 $ 1.66
> 02/04/2004 14-010-002015L 001881 $ 0.12
> 03/04/2004 14-010-002015L 001881 $ 0.15
>
> ...
>
> Lo que necesito es, para cada ITEMNUM, buscar el siguiente y, si


UNITCOST
es
> mayor a un 5% del valor del anterior, lo mande a la consulta...
>
> ... seria una cosa asi:
>
> ITEMNUM DATE1 VENDOR1 COST1 DATE2 VENDOR2


COST2
> PORC
> 14-010-002015L 02/04/2004 001881 $ 0.12 03/04/2004 001881 $


0.15
> 25.00%
>
> ...
>
> Es posible hacerlo mediante una subconsulta? O tengo que generar el


codigo
> correspondiente?Espero haberme hecho entender. Gracias desde ahora.
>
> Julio.
>
> "Para triunfar, el mero planteamiento inicial no basta. También hay que
> improvisar."
> (Salvor Hardin)
>
>


Respuesta Responder a este mensaje
#3 Anonimo
23/06/2004 - 13:43 | Informe spam
Me parece que no, ya que la idea no es sacar el max por item, sino que, cada
vez que se detecte un incremento del valor de un item mayor al 5%, se genere
el registro. Si es del mismo item, no importa. Imaginate esta situacion:

DATE ITEMNUM VEND COST
==/04/2004 14-010-000054E 001881 $ 0.21
02/04/2004 14-010-002007L 001881 $ 1.66
02/04/2004 14-010-002015L 001881 $ 0.12
03/04/2004 14-010-002015L 001881 $ 0.15
03/04/2004 14-010-002007L 001881 $ 1.66
04/04/2004 14-010-000054E 002536 $ 0.18
04/04/2004 14-010-002007L 000401 $ 1.70
05/04/2004 14-010-002015L 001881 $ 0.20
05/04/2004 14-010-000054E 009999 $ 0.20

...

Una posibilidad seria hacer una consulta que me devolviera este resultado:

ITEMNUM DATE1 VENDOR1 COST1 DATE2 VENDOR2 COST2
INDICE
==-010-000054E 02/04/2004 001881 $ 0.21 04/04/2004 002536 $
.18 -0.1429
14-010-000054E 04/04/2004 002536 $ 0.18 04/04/2004 009999 $ 0.20
0.1111
14-010-002007L 02/04/2004 001881 $ 1.66 03/04/2004 001881 $ 1.66
0.0000
14-010-002015L 02/04/2004 001881 $ 0.12 03/04/2004 001881 $ 0.15
0.2500
14-010-002015L 03/04/2004 001881 $ 0.15 05/04/2004 001881 $ 0.20
0.3333

...

O sea, para cada ITEMNUM, buscar la siguiente ocurrencia y calcular la
diferencia de costo. Despues bastaria con filtrar por INDICE > 0.0500.

Esto es para tener un control sobre los costos de las compras que se
realizan, y poder identificar los proveedores con mejor costo.

Espero haberme hecho entender mejor esta vez.

Gracias.

Julio.
"MAXI" escribió en el mensaje
news:
Hola, lo que no entiendo es que buscas? o sea, vos queres en una sola


linea
traer el valor del item y el valor que le sigue? o solo traer el valor que
le sigue si es mayor al 5% con respecto al valor que tenes?

Suerte




Maxi

Buenos Aires - Argentina

Desarrollador .NET 3 Estrellas

Mail: Maxi_accotto[arroba]speedy.com.ar

MSN:


escribió en el mensaje
news:ubZB%
> Amigos foreros:
>
> Despues de mucho tiempo, me reincorporo a los foros (antes aparecia como
> ).
> Tengo una consulta con los siguientes datos:
>
> DATEGENERATED ITEMNUM VENDORID UNITCOST
> 02/04/2004 14-010-000054E 001881 $ 0.21
> 02/04/2004 14-010-002007L 001881 $ 1.66
> 02/04/2004 14-010-002015L 001881 $ 0.12
> 03/04/2004 14-010-002015L 001881 $ 0.15
>
> ...
>
> Lo que necesito es, para cada ITEMNUM, buscar el siguiente y, si


UNITCOST
es
> mayor a un 5% del valor del anterior, lo mande a la consulta...
>
> ... seria una cosa asi:
>
> ITEMNUM DATE1 VENDOR1 COST1 DATE2 VENDOR2


COST2
> PORC
> 14-010-002015L 02/04/2004 001881 $ 0.12 03/04/2004 001881 $


0.15
> 25.00%
>
> ...
>
> Es posible hacerlo mediante una subconsulta? O tengo que generar el


codigo
> correspondiente?Espero haberme hecho entender. Gracias desde ahora.
>
> Julio.
>
> "Para triunfar, el mero planteamiento inicial no basta. También hay que
> improvisar."
> (Salvor Hardin)
>
>


Respuesta Responder a este mensaje
#4 Javier Loria
23/06/2004 - 17:46 | Informe spam
Hola Julio:
No estoy seguro pero tal vez te sirve algo como esto:
=SELECT IA.Date
, IA.ItemNum
, IA.Vend
, IA.Cost,
, IA.FechaCompraAnterior
, I3.Cost AS CostoAnterior
, CAST( 100.0*(IA.Cost-I3.Cost)/I3.Cost AS Numeric(9,2))
FROM
(SELECT I1.Date
, I1.ItemNum
, I1.Vend
, I1.Cost
, MAX(I2.Date) AS FechaCompraAnterior
FROM Items AS I1
JOIN Items AS I2
ON I1.ItemNum=I2.ItemNum
AND I1.Date>I2.Date
GROUP BY I1.Date, I1.ItemNum, I1.Vend, I1.Cost) AS IA
JOIN Items AS I3
ON IA.ItemNum=I3.ItemNum
AND IA.FechaCompraAnterior=I3.Date
WHERE IA.Cost/I3.Cost>1.05
=Esto asume que la combinacion de columnas Date, ItemNum es llave candidata o
sea que son UNICAS las combinaciones y no hay dos items con la misma fecha e
numero de item. Si esto no es cierto se complica un poco mas la sentencia.
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.
escribio:
Me parece que no, ya que la idea no es sacar el max por item, sino
que, cada vez que se detecte un incremento del valor de un item mayor
al 5%, se genere el registro. Si es del mismo item, no importa.
Imaginate esta situacion:

DATE ITEMNUM VEND COST
> 02/04/2004 14-010-000054E 001881 $ 0.21
02/04/2004 14-010-002007L 001881 $ 1.66
02/04/2004 14-010-002015L 001881 $ 0.12
03/04/2004 14-010-002015L 001881 $ 0.15
03/04/2004 14-010-002007L 001881 $ 1.66
04/04/2004 14-010-000054E 002536 $ 0.18
04/04/2004 14-010-002007L 000401 $ 1.70
05/04/2004 14-010-002015L 001881 $ 0.20
05/04/2004 14-010-000054E 009999 $ 0.20

...

Una posibilidad seria hacer una consulta que me devolviera este
resultado:

ITEMNUM DATE1 VENDOR1 COST1 DATE2 VENDOR2
COST2 INDICE

> 14-010-000054E 02/04/2004 001881 $ 0.21 04/04/2004 002536 $
.18 -0.1429
14-010-000054E 04/04/2004 002536 $ 0.18 04/04/2004 009999 $
0.20
0.1111
14-010-002007L 02/04/2004 001881 $ 1.66 03/04/2004 001881 $
1.66
0.0000
14-010-002015L 02/04/2004 001881 $ 0.12 03/04/2004 001881 $
0.15
0.2500
14-010-002015L 03/04/2004 001881 $ 0.15 05/04/2004 001881 $
0.20
0.3333

...

O sea, para cada ITEMNUM, buscar la siguiente ocurrencia y calcular la
diferencia de costo. Despues bastaria con filtrar por INDICE > 0.0500.

Esto es para tener un control sobre los costos de las compras que se
realizan, y poder identificar los proveedores con mejor costo.

Espero haberme hecho entender mejor esta vez.

Gracias.

Julio.
"MAXI" escribió en el mensaje
news:
Hola, lo que no entiendo es que buscas? o sea, vos queres en una
sola linea traer el valor del item y el valor que le sigue? o solo
traer el valor que le sigue si es mayor al 5% con respecto al valor
que tenes?

Suerte




Maxi

Buenos Aires - Argentina

Desarrollador .NET 3 Estrellas

Mail: Maxi_accotto[arroba]speedy.com.ar

MSN:


escribió en el mensaje
news:ubZB%
Amigos foreros:

Despues de mucho tiempo, me reincorporo a los foros (antes aparecia
como ).
Tengo una consulta con los siguientes datos:

DATEGENERATED ITEMNUM VENDORID UNITCOST
02/04/2004 14-010-000054E 001881 $ 0.21
02/04/2004 14-010-002007L 001881 $ 1.66
02/04/2004 14-010-002015L 001881 $ 0.12
03/04/2004 14-010-002015L 001881 $ 0.15

...

Lo que necesito es, para cada ITEMNUM, buscar el siguiente y, si
UNITCOST es mayor a un 5% del valor del anterior, lo mande a la
consulta...

... seria una cosa asi:

ITEMNUM DATE1 VENDOR1 COST1 DATE2 VENDOR2
COST2 PORC
14-010-002015L 02/04/2004 001881 $ 0.12 03/04/2004 001881
$ 0.15
25.00%

...

Es posible hacerlo mediante una subconsulta? O tengo que generar el
codigo correspondiente?Espero haberme hecho entender. Gracias desde
ahora.

Julio.

"Para triunfar, el mero planteamiento inicial no basta. También hay
que improvisar."
(Salvor Hardin)
Respuesta Responder a este mensaje
#5 Javier Loria
24/06/2004 - 17:12 | Informe spam
Hola Julio:
Asumes que se Access y la verdad tengo muy poco experiencia con esta
herramienta.:(
A pesar de esto te envio un paso a paso a ver si te sirve, antes
explicarte que Access tiene su propio SQL que no es Ansi y que difiere en
algunos puntos del T-SQL que es lo que usa MS SQL.
Particularmente importante en este caso es el JOIN que yo hice con una
condicion > (mayor que) y a Access esto no le hace mucha gracia. Finalmente
para poder hacer lo deseado hice 3 queries y asi divido el problema en
partes mas sencillas. Esto probablmente no es muy eficiente pero es mas
sencillo de programar. Tal vez alguien del foro de Access pueda hacerlo
mejor
Obtener la fecha anterior
=a) Agrega una nueva Query en modo de diseno y agrega la tabla mp2_po, 2
veces!!!. Esto es lo que permite enlazar una fila de mp2_po con otra fila
del mismo.
b) Enlaza mp2_po con mp2_po_1 arrastrando en campo ItemNum de mp2_po sobre
el ItemNum mp2_po_1.
c) Haz doble clic sobre las columnas de mp2_po: ItemNum, VendorID, UnitCost,
DateGenerated
d) Oprime el Boton de Totales (el signo de Sumatoria en la Barra de
Herramientas) Esto permite agrupar
e) Haz doble clic sobre la columna de DateGenerated de mp2_po_1, OJO QUE ES
DE LA OTRA TABLA. Y en la columna que se acaba de agregar cambia la fila
Total cambia el Group By por un Where en la parte de criteria agrega la
condicion: <[mp2_po].[DateGenerated]. Esto Filtra los datos a solo los
anteriores.
f) Nuevamente haces doble clic sobre la columna DateGenerated de mp2_po_1 y
cambias en la recien agregada columna la fila de total por un MAX. Para que
el nombre sea mas representativo cambia el campo Field por
UltimaFechaAnterior: DateGenerated
g) Graba la consulta como mp2_po_UltimaFecha
Calcular los Costos
a) Agrega una nueva query en modo de diseno y agregas la tabla mp2_po y la
consulta mp2_po_UltimaFecha
b) Enlaza mp2_po_FechaAnterior con mp2_po arrastrando las columa ItemNum
sobre ItemNum y UltimaFechaAnterior sobre DateGenerated respectivamente.
c) Haz dobl clic sobre las columnas ItemNum, VendorId, UnitCost,
DateGenerated y UltimaFechaAnterior de la Tabla Mp2_po_Fechas.
d) Haz doble clic sobre la columna UnitCost de la tabla mp2_po. Cambia el
nombre de la columna cambiando el Field como CostoAnterior: UNITCOST
e) Agrega una columna Adicional usando en el Field Variacion: ([Costo
Actual]/[CostoAnterior])-1. Adicionalmente puedes cambiarle las propiedades
a formato porcentual.
f) Graba la Consulta como mp2_po_VariacionCostos.
Filtra Varaciones imporantantes
==a) Agrega una nueva query en modo de diseno y agregar la consulta
mp2_po_VariacionCostos.
b) Agrega todas las columnas de mp2_po_VariacionCostos.
c) Agrega un criterio en la columna Variacion >.05
d) Graba la consulta como mp2_po_VariacionCostosMayor5

Disculpa lo largo del mensaje y espero te sirva. Lo probe con Access
2000 en ingles SP2.
Saludos,


Javier Loria
Costa Rica

PD: Ahora si me dan el titulo en Access?

wrote in message
news:
Javier:

Has sido muy amable conmigo. Estoy trabajando en los codigos que me
suministraste. El tema es que (y aca viene, quizas el problema), la consulta
SQL la estoy haciendo desde Access, y quizas la implementacion con respecto
a SQL server sea algo diferente.

Tal vez me estoy perdiendo en algo, es por eso que quiero ser lo mas claro
posible en mis consultas al foro. No soy mas que un neofito en esto del SQL,
pero soy consciente que es una de las herramientas mas poderosas que
conozco.

Voy a abusar un poco mas de tu paciencia y sapiencia. Adjunto el archivo con
el cual estoy trabajando. Desde ya, muchiiiiiiiiiiiiiiiiiiiisimas gracias.

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