SQL - Consulta SQL

 
Vista:

Consulta SQL

Publicado por javier (1 intervención) el 26/07/2012 12:10:00
Hola, tengo un problema con esta consulta, tengo esta tabla :

itemcode pricelist price updatedate
PT100272B10400101037 31 0.000000 2012-07-26 00:00:00.000
PT100272B10400101037 31 0.000000 2012-07-26 00:00:00.000
PT100272B10400101037 31 4.000000 2012-07-26 00:00:00.000
PT100272B10400101037 31 0.000000 2012-05-29 00:00:00.000
PT100272B10400101037 31 0.000000 2012-05-02 00:00:00.000
PT100272B10400101037 31 4.000000 2012-04-24 00:00:00.000
PT100272B10400101037 31 4.000000 2012-04-22 00:00:00.000

Y necesito sacar la menor fecha de un cambio de precio es decir, éste resultado

itemcode pricelist price updatedate
PT100272B10400101037 31 0.000000 2012-07-26 00:00:00.000
PT100272B10400101037 31 4.000000 2012-07-26 00:00:00.000
PT100272B10400101037 31 0.000000 2012-05-02 00:00:00.000
PT100272B10400101037 31 4.000000 2012-04-22 00:00:00.000


Un Saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Consulta SQL

Publicado por leonardo_josue (1173 intervenciones) el 26/07/2012 17:11:49
Hola Javier:

No entiendo cuál es el criterio que estás considerando para filtrar lo registros, ¿a qué te refieres con sacar la menor fecha de un cambio de precio?

Para empezar, en los datos que pones de prueba pones registros repetidos:

1
2
PT100272B10400101037 31	0.000000	2012-07-26 00:00:00.000
PT100272B10400101037 31	0.000000	2012-07-26 00:00:00.000


¿Esto es posible en tu tabla o fue un error de "dedo"?

No me queda claro el criterio para incluir o excluir los registros que estás poniendo de ejemplo... por lo pronto, y basándome en el enunciado que pones te pongo un script que tal vez te pueda servir.

Supongamos que tienes esta información.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> SELECT * FROM tabla;
+------+-------------+---------------------+
| id   | descripcion | fecha               |
+------+-------------+---------------------+
|    1 | uno         | 2012-07-26 09:57:00 |
|    1 | one         | 2012-07-26 09:58:23 |
|    1 | un          | 2012-07-26 10:00:51 |
|    2 | dos         | 2012-07-26 09:10:36 |
|    2 | two         | 2012-07-26 07:30:29 |
|    2 | deux        | 2012-07-26 11:16:47 |
|    3 | tres        | 2012-07-26 08:29:21 |
|    3 | three       | 2012-07-26 09:43:22 |
|    3 | trois       | 2012-07-26 08:20:45 |
+------+-------------+---------------------+
9 rows in set (0.06 sec)


Ahora supongamos que quieres obtener la descripción con menor fecha para cada id, es decir estos registros:

1
2
3
4
5
6
7
8
9
10
mysql> SELECT id, MIN(fecha) min_fecha
    -> FROM tabla GROUP BY id;
+------+---------------------+
| id   | min_fecha           |
+------+---------------------+
|    1 | 2012-07-26 09:57:00 |
|    2 | 2012-07-26 07:30:29 |
|    3 | 2012-07-26 08:20:45 |
+------+---------------------+
3 rows in set (0.00 sec)


Si incluyeras el campo descripción en el GROUP BY no te serviría de nada, pero puedes utilizar esto como una subconsulta y hacer un JOIN con la misma tabla, es decir, algo como esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT T1.*
    -> FROM tabla T1
    -> INNER JOIN
    -> ( SELECT id, MIN(fecha) min_fecha
    ->   FROM tabla GROUP BY id ) T2
    -> ON T1.id = T2.id AND T1.fecha = T2.min_fecha;
+------+-------------+---------------------+
| id   | descripcion | fecha               |
+------+-------------+---------------------+
|    1 | uno         | 2012-07-26 09:57:00 |
|    2 | two         | 2012-07-26 07:30:29 |
|    3 | trois       | 2012-07-26 08:20:45 |
+------+-------------+---------------------+
3 rows in set (0.01 sec)


Si esto no te sirve te invito a que te tomes tu tiempo en explicarnos exactamente qué es lo que necesitas, con gusto trataremos de ayudarte.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar