2011-07-13 23 views
18

Estoy extrayendo datos de una base de datos y una de las tablas contiene dos columnas que juntas identifican una ubicación y otra columna que contiene una fecha de cada vez que fue atendida. ¿Es posible escribir una consulta SQL de modo que obtenga la hora más reciente en que se realizó el servicio de cada ubicación?SQL: seleccione la fecha más reciente para cada categoría

Así que si mis datos en bruto se parece a esto:

category_a category_b date 
     1   a  1/1/01 
     1   a  2/2/02 
     1   b  1/2/01 
     1   b  2/3/02 
     2   a  1/3/01 
     2   a  2/4/02 
     2   b  1/4/01 
     2   b  2/5/02 

entonces la consulta devolvería esto:

category_a category_b date 
     1   a  2/2/02 
     1   b  2/3/02 
     2   a  2/4/02 
     2   b  2/5/02 

Esto sería fácil de hacer si la base de datos fue escrito de tal manera que las combinaciones de categorías se almacenaron en una tabla separada. Sin embargo, no controlo esta base de datos, por lo que no puedo hacer cambios en ella.

+0

¿Por qué hay un (-1) sobre esta cuestión? – jp2code

+3

Me preguntaba lo mismo. No soy un experto en SQL, pero pensé que había explicado bien mi pregunta ... – Wilduck

+0

Quizás hayas molestado a alguien con otro tema, y ​​ellos respondieron mordiéndote. He tenido que pasar antes. – jp2code

Respuesta

8
SELECT 
    category_a, 
    category_b, 
    MAX(date) 
FROM 
    Some_Unnamed_Table 
GROUP BY 
    category_a, 
    category_b 
ORDER BY 
    category_a, 
    category_b 

Desde luego, no me importa ayudar personas cuando puedo, o no estaría en este sitio, pero ¿realmente buscabas una respuesta para esto antes de publicar?

+3

Lo hice. Desafortunadamente, no tuve las palabras para explicar esto de forma googleable. De hecho, terminé leyendo sobre las afirmaciones de CASE durante 15 minutos antes de decir: "A la mierda, alguien de SO sabe cómo responder esto". Realmente aprecio la ayuda. – Wilduck

+0

Entendido. Me alegro de poder ayudar. –

2

Este es un simple "grupo por" usando el hecho de la fecha de la "más reciente" es el "más alto valor", o max(), fecha

select category_a, category_b, max(date) 
from mytable 
group by category_a, category_b 
order by category_a, category_b -- The ORDER BY is optional, but the example data suggests it's needed 
1

seleccione category_a, category_b, max (date) from tbl group por category_a, category_b;

1

Trate

select category_a, category_b, max(date) as last_update from table group by category_a, category_b 
Cuestiones relacionadas