Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

buscar la compra anterior en la misma tabla

Estas en el tema de buscar la compra anterior en la misma tabla en el foro de SQL Server en Foros del Web. Hola a todos, gracias todos por la ayuda que prestan en este foro, para variar , aqui estoy por esta inquietud, en la cual consiste ...
  #1 (permalink)  
Antiguo 30/06/2010, 16:17
 
Fecha de Ingreso: abril-2010
Mensajes: 38
Antigüedad: 14 años
Puntos: 0
De acuerdo buscar la compra anterior en la misma tabla

Hola a todos, gracias todos por la ayuda que prestan en este foro, para variar , aqui estoy por esta inquietud, en la cual consiste en consulta en 1 sola tabla. Yo actualmente consulto cualquier dia y siempre me devuelve 4 campos los cuales son las compras realizadas en ese dia:


FECHA_LLEGADA---------------CODIGO------------CANTIDAD-----------COSTO

El codigo es el siguiente:


DECLARE @fechainicial datetime, @fechafinal datetime
SET @fechainicial = '30-06-2010'; SET @fechafinal = '30-06-2010';

SELECT FECHA_LLEGADA, CODIGO, CANTIDAD, COSTO_UNIT
FROM master.dbo.REG_COMPRAS
WHERE (FECHA_LLEGADA BETWEEN @fechainicial AND @fechafinal)

Y lo que quiero es agregar 3 columnas mas de la misma tabla, que en realidad son las misma columnas que estan arriba ejemplo, FECHA_LLEGADA seria ahora (FECHA_ULTIMA_COMPRA) CANTIDAD ahora seria (CANT_ANTERIOR) Y COSTO_UNIT seria (ULT_COSTO)

Mas simple de seria con este ejemplo de como quedarian las columna.

FECHA_LLEGADA--CODIGO--CANTIDAD--COSTO--FECHA_ULTiMA_COMPRA--CANT_ANTERIOR--ULT_COSTO

No importa la fecha que consulte, siempre me deberia entregar la ultima compra realizada, que esta registrada en la misma tabla.

de ante mano, muchas gracias...
  #2 (permalink)  
Antiguo 30/06/2010, 17:21
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: buscar la compra anterior en la misma tabla

1, consultas la misma tabla con un ALIAS, 2, creas una funcion de usuario a la que le pases los datos y te obtenga la "venta anterior".

Compara las fechas con >= y <=
  #3 (permalink)  
Antiguo 01/07/2010, 07:46
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: buscar la compra anterior en la misma tabla

normalmente se hace asi...
Código SQL:
Ver original
  1. DECLARE @fechainicial datetime, @fechafinal datetime
  2. SET @fechainicial = '30-06-2010'; SET @fechafinal = '30-06-2010';
  3.  
  4. SELECT  T1.FECHA_LLEGADA
  5.     ,   T1.CODIGO
  6.     ,   T1.CANTIDAD
  7.     ,   T1.COSTO_UNIT
  8.     ,   (   SELECT top 1    T2.FECHA_LLEGADA
  9.             FROM master.dbo.REG_COMPRAS T2
  10.             WHERE   T2.FECHA_LLEGADA < T1.FECHA_LLEGADA
  11.                 AND T2.CODIGO = T1.CODIGO
  12.             ORDER BY    T2.FECHA_LLEGADA DESC
  13.         )   FECHA_ULTIMA_COMPRA
  14.     ,   (   SELECT top 1    T2.CANTIDAD
  15.             FROM master.dbo.REG_COMPRAS T2
  16.             WHERE   T2.FECHA_LLEGADA < T1.FECHA_LLEGADA
  17.                 AND T2.CODIGO = T1.CODIGO
  18.             ORDER BY    T2.FECHA_LLEGADA DESC
  19.         )   CANT_ANTERIOR
  20.     ,   (   SELECT top 1    T2.COSTO_UNIT
  21.             FROM master.dbo.REG_COMPRAS T2
  22.             WHERE   T2.FECHA_LLEGADA < T1.FECHA_LLEGADA
  23.                 AND T2.CODIGO = T1.CODIGO
  24.             ORDER BY    T2.FECHA_LLEGADA DESC
  25.         )   ULT_COSTO
  26. FROM master.dbo.REG_COMPRAS T1
  27. WHERE   T1.FECHA_LLEGADA BETWEEN @fechainicial AND @fechafinal

y en oracle... lo podria hacer asi...
Código SQL:
Ver original
  1. WITH    Compras
  2. AS  (   SELECT  FECHA_LLEGADA
  3.             ,   CODIGO
  4.             ,   CANTIDAD
  5.             ,   COSTO_UNIT
  6.         FROM master.dbo.REG_COMPRAS
  7.         WHERE   T1.FECHA_LLEGADA BETWEEN @fechainicial AND @fechafinal
  8.     )
  9. SELECT  T1.FECHA_LLEGADA
  10.     ,   T1.CODIGO
  11.     ,   T1.CANTIDAD
  12.     ,   T1.COSTO_UNIT
  13.     ,   T2.FECHA_LLEGADA 'FECHA_ULTIMA_COMPRA'
  14.     ,   T2.CANTIDAD 'CANT_ANTERIOR'
  15.     ,   T2.COSTO_UNIT 'ULT_COSTO'
  16. FROM master.dbo.REG_COMPRAS T2, Compras T1
  17. WHERE   T2.FECHA_LLEGADA < T1.FECHA_LLEGADA
  18.     AND T2.CODIGO = T1.CODIGO
  19. ORDER BY    T2.FECHA_LLEGADA DESC
no lo eh probado... es cuestion de probar... Saludos

Última edición por -rommel_; 01/07/2010 a las 07:58
  #4 (permalink)  
Antiguo 01/07/2010, 10:51
 
Fecha de Ingreso: abril-2010
Mensajes: 38
Antigüedad: 14 años
Puntos: 0
De acuerdo Respuesta: buscar la compra anterior en la misma tabla

Hola Rommel, gusto en saludarte, dejame decirte que el codigo que enviastes esta super genial, te pasastes. Muchas Gracias...
  #5 (permalink)  
Antiguo 01/07/2010, 13:59
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: buscar la compra anterior en la misma tabla

pero amigo cual de los 2 ???...
  #6 (permalink)  
Antiguo 01/07/2010, 15:53
 
Fecha de Ingreso: abril-2010
Mensajes: 38
Antigüedad: 14 años
Puntos: 0
De acuerdo Respuesta: buscar la compra anterior en la misma tabla

Hola Rommel, estoy aprendiendo el codigo SQL, este codigo SQL que enviastes esta muy bueno, ORACLE no lo manejo para nada, pero por lo visto los codigos son muy parecidos.

  #7 (permalink)  
Antiguo 01/07/2010, 16:03
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: buscar la compra anterior en la misma tabla

si es muy parecido... pero hay otras cosas que simplifican y otras cosas que complican... como diria una anciana... cada loco con su tema
  #8 (permalink)  
Antiguo 07/07/2010, 09:00
 
Fecha de Ingreso: abril-2010
Mensajes: 38
Antigüedad: 14 años
Puntos: 0
Respuesta: buscar la compra anterior en la misma tabla

Hola de nuevo, el código enviado esta genial, pero solo por curiosidad, habrá una forma para acelerar la consulta, aprox son más de 10.000 datos diarios y aprox se demora como 25 a 27 minutos por cada día, cada que se ejecuta.

Como he dicho, funciona de maravilla este código, solo quiero saber si se puede acelerar esta consulta y más o menos como serían los pasos a seguir.

Muchas gracias a todos...
  #9 (permalink)  
Antiguo 07/07/2010, 09:33
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: buscar la compra anterior en la misma tabla

hay muchas formas de acelerar tu consulta... San google te responde eso con gran cantidad de material para que estudies... yo te propongo una... INDICES, de ahi hay muchas... busca y a evr si te ayuda...
  #10 (permalink)  
Antiguo 07/07/2010, 09:52
 
Fecha de Ingreso: abril-2010
Mensajes: 38
Antigüedad: 14 años
Puntos: 0
Respuesta: buscar la compra anterior en la misma tabla

Hola rommel, muchas gracias por tu ayuda. Buscare todo acerca de los indices.
  #11 (permalink)  
Antiguo 07/07/2010, 12:19
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: buscar la compra anterior en la misma tabla

Prueba asi:
Código SQL:
Ver original
  1. DECLARE @fechainicial datetime, @fechafinal datetime
  2. SELECT @fechainicial = '30-06-2010', @fechafinal = '30-06-2010'
  3.  
  4. SELECT  T1.FECHA_LLEGADA, T1.CODIGO, T1.CANTIDAD, T1.COSTO_UNIT,
  5. FECHA_ULTIMA_COMPRA, CANT_ANTERIOR, ULT_COSTO
  6. FROM master.dbo.REG_COMPRAS T1
  7. INNER JOIN (
  8.     SELECT CODIGO, MAX(FECHA_LLEGADA) FECHA_ULTIMA_COMPRA,
  9.     MAX(CANTIDAD) CANT_ANTERIOR, MAX(COSTO_UNIT) ULT_COSTO
  10.     FROM master.dbo.REG_COMPRAS
  11.     GROUP BY CODIGO
  12. ) T2 ON T1.CODIGO = T2.CODIGO AND T1.FECHA_LLEGADA <= T2.FECHA_ULTIMA_COMPRA
  13. WHERE T1.FECHA_LLEGADA >= @fechainicial AND T1.FECHA_LLEGADA <= @fechafinal
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #12 (permalink)  
Antiguo 08/07/2010, 09:33
 
Fecha de Ingreso: abril-2010
Mensajes: 38
Antigüedad: 14 años
Puntos: 0
Respuesta: buscar la compra anterior en la misma tabla

Hola estimado flaviovich, primero que nada en agradecerte por el interes en el problemita, he pegado el codigo que me has enviado y me devuelve siempre la ultima compra, no la compra anterior a la ultima compra de la fecha que consulto.

Última edición por mfernandez1982; 20/07/2010 a las 11:05

Etiquetas: compra, tablas, anteriores
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:57.