2010-01-18 18 views
7

excusa el título, no podía llegar a algo corto y al grano ...seleccionar últimas filas por valor de clave externa distinta

Tengo una mesa '' actualizaciones con las tres columnas, texto , typeid, creado - el texto es un campo de texto, typeid es una clave externa de una tabla 'type' y creado es una marca de tiempo. Un usuario está ingresando una actualización y selecciona el 'tipo' que corresponde también.

Hay una tabla correspondiente 'tipo' con columnas 'id' y 'name'.

Estoy tratando de terminar con un conjunto de resultados con tantas filas como en la tabla 'tipo' y el último valor de updates.text para la fila en particular de tipos. Entonces, si tengo 3 tipos, se devolverán 3 filas, una fila para cada tipo y el valor más actual de updates.text para el tipo en cuestión.

¿Alguna idea?

gracias,

John.

Respuesta

14
select u.text, u.typeid, u.created, t.name 
from (
    select typeid, max(created) as MaxCreated 
    from updates 
    group by typeid 
) mu 
inner join updates u on mu.typeid = u.typeid and mu.MaxCreated = u.Created 
left outer join type t on u.typeid = t.typeid 
0

¿Cuáles son las columnas reales que desea devolver?

SELECT t.*, 
     y.* 
    FROM TYPE t 
    JOIN (SELECT u.typeid, 
       MAX(u.created) 'max_created' 
      FROM UPDATES u 
     GROUP BY u.typeid) x ON x.typeid = t.id 
    JOIN UPDATES y ON y.typeid = x.typeid 
       AND y.created = x.max_created 
0
SELECT 
    TYP.id, 
    TYP.name, 
    TXT.comment 
FROM 
    dbo.Types TYP 
INNER JOIN dbo.Type_Comments TXT ON 
    TXT.type_id = TYP.id 
WHERE 
    NOT EXISTS 
    (
      SELECT 
       * 
      FROM 
       dbo.Type_Comments TXT2 
      WHERE 
       TXT2.type_id = TYP.id AND 
       TXT2.created > TXT.created 
    ) 

O:

SELECT 
    TYP.id, 
    TYP.name, 
    TXT.comment 
FROM 
    dbo.Types TYP 
INNER JOIN dbo.Type_Comments TXT ON 
    TXT.type_id = TYP.id 
LEFT OUTER JOIN dbo.Type_Comments TXT2 ON 
    TXT2.type_id = TYP.id AND 
    TXT2.created > TXT.created 
WHERE 
    TXT2.type_id IS NULL 

En cualquier caso, si la fecha de creación puede ser idéntica entre dos filas con el mismo TYPE_ID entonces usted tendría que dar cuenta de ello.

También he supuesto que existe al menos un comentario por tipo. Si ese no es el caso, entonces necesitarías hacer un pequeño ajuste para eso también.

Cuestiones relacionadas