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

[SOLUCIONADO] obtener precio de varios articulos a determinada fecha

Estas en el tema de obtener precio de varios articulos a determinada fecha en el foro de Bases de Datos General en Foros del Web. hola a todos!!! necesito escribir una consulta sql pero necesito su ayuda tengo una tabla llamada test y cuatro columnas: order_id(integer), article_id(integer), price_date(date) and price(double) ...
  #1 (permalink)  
Antiguo 20/05/2013, 16:45
 
Fecha de Ingreso: diciembre-2011
Mensajes: 12
Antigüedad: 12 años, 4 meses
Puntos: 0
Pregunta obtener precio de varios articulos a determinada fecha

hola a todos!!! necesito escribir una consulta sql pero necesito su ayuda
tengo una tabla llamada test y cuatro columnas: order_id(integer), article_id(integer), price_date(date) and price(double)
por ejemplo:

order_id | article_id | price_date | price
01 6 "2013-01-10" 67.35
45 7 "2013-01-10" 108.01
89 8 "2013-01-10" 144.18
10 9 "2013-01-10" 181.19
12 10 "2013-01-16" 29.53
32 11 "2013-01-13" 20.5
56 11 "2013-01-16" 20.7
12 11 "2013-01-16" 20.8
74 11 "2013-02-01" 20.91
63 13 "2013-01-16" 66.1
85 14 "2013-01-16" 51.9
44 14 "2013-01-16" 51.2
94 14 "2013-02-01" 51.06
77 15 "2013-01-16" 16.3


lo que necesito es que al entrar SOLO UNA fecha, me devuelva la lista de todos los articulos con SOLO el precio en donde la fecha es igual o menor que la indicada, pero solo devolver el precio más cercano (es decir solo UN precio y un articulo... sin repetir)
un detalle es que cuando hay dos o mas filas que tienen igual fecha necesito solo la que tiene el "order_id" mas grande
por ejemplo:
entrando la fecha '2013-01-16' debería devolver esto:

order_id | article_id | price_date | price
01 6 "2013-01-10" 67.35
45 7 "2013-01-10" 108.01
89 8 "2013-01-10" 144.18
10 9 "2013-01-10" 181.19
12 10 "2013-01-16" 29.53
56 11 "2013-01-16" 20.7
63 13 "2013-01-16" 66.1
85 14 "2013-01-16" 51.9
77 15 "2013-01-16" 16.3

creo que pueden ayudarme...
GRACIAS DESDE YA!!

Última edición por nicokne; 20/05/2013 a las 16:57 Razón: cambio de idioma
  #2 (permalink)  
Antiguo 21/05/2013, 15:09
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: obtener precio de varios articulos a determinada fecha

Hola nicokne:

En primer lugar deberías comenzar por decirnos ¿Qué BD es la que estás utilizando? aunque todos los motores utilizan SQL como lenguaje de consultas, existen diferencias sintácticas importantes entre cada uno de ellos. ahora bien, volvamos a tu problema... en realidad este tipo de consultas la hemos tratado muchísimas veces en este foro, me cuesta trabajo creer que no hayas encontrado ningún post que que pudiera servir... la idea es básicamente la siguiente... supongamos que tu BD es MySQL y que tienes la siguiente información:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +----------+------------+------------+--------+
  3. | order_id | article_id | price_date | price  |
  4. +----------+------------+------------+--------+
  5. |        1 |          6 | 2013-01-10 | 67.35  |
  6. |       45 |          7 | 2013-01-10 | 108.01 |
  7. |       89 |          8 | 2013-01-10 | 144.18 |
  8. |       10 |          9 | 2013-01-10 | 181.19 |
  9. |       12 |         10 | 2013-01-16 | 29.53  |
  10. |       32 |         11 | 2013-01-13 | 20.5   |
  11. |       56 |         11 | 2013-01-16 | 20.7   |
  12. |       12 |         11 | 2013-01-16 | 20.8   |
  13. |       74 |         11 | 2013-02-01 | 20.91  |
  14. |       63 |         13 | 2013-01-16 | 66.1   |
  15. |       85 |         14 | 2013-01-16 | 51.9   |
  16. |       44 |         14 | 2013-01-16 | 51.2   |
  17. |       94 |         14 | 2013-02-01 | 51.06  |
  18. |       77 |         15 | 2013-01-16 | 16.3   |
  19. +----------+------------+------------+--------+
  20. 14 rows in set (0.00 sec)

Ahora bien... en realidad lo que te interesa es obtener el MAX(order_id) para cara artículo, verificando sólo la fecha... esto lo obtienes de la siguiente manera:

Código MySQL:
Ver original
  1. mysql> SELECT MAX(order_id) max_order_id, article_id
  2.     -> FROM tabla
  3.     -> WHERE price_date <= '2013-01-16'
  4.     -> GROUP BY article_id;
  5. +--------------+------------+
  6. | max_order_id | article_id |
  7. +--------------+------------+
  8. |            1 |          6 |
  9. |           45 |          7 |
  10. |           89 |          8 |
  11. |           10 |          9 |
  12. |           12 |         10 |
  13. |           56 |         11 |
  14. |           63 |         13 |
  15. |           85 |         14 |
  16. |           77 |         15 |
  17. +--------------+------------+
  18. 9 rows in set (0.00 sec)

Observa que sólo te regresa un order_id para cada artículo. Una vez que tienes esta tabla lo único que tienes que hacer es FILTRAR LA INFORMACIÓN DE TU TABLA para regresar sólo los registros que EXISTAN en esta tabla... puedes hacerlo mediante un INNER JOIN o mediante la cláusula EXISTS...
Haz el intento y si tienes problemas, postea algo de lo que intentaste hacer y con gusto te ayudamos a resolver la consulta.

saludos
Leo.
  #3 (permalink)  
Antiguo 21/05/2013, 19:30
 
Fecha de Ingreso: diciembre-2011
Mensajes: 12
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: obtener precio de varios articulos a determinada fecha

gracias leonardo_josue, lo indicado es lo que necesito. saludos

Etiquetas: postgres, postgresql, sql
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 22:06.