2010-01-18 75 views
7

藉口標題,我不能拿出一些簡短的和點...每個不同的外鍵值選擇最新的行

我有一個表'更新'的三列,文本,typeid,created - text是一個文本字段,typeid是來自'type'表的外鍵,並且創建的是一個時間戳。用戶正在輸入更新並選擇它所對應的「類型」。

有一個對應的'類型'表'列'ID'和'名稱'。

我試圖最終得到一個結果集,它包含'type'表中的行數和來自updates.text的最新值,用於類型中的特定行。因此,如果我有3種類型,則會返回3行,每種類型都有一行,以及所討論類型的最新updates.text值。

任何想法?

謝謝,

約翰。

回答

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

什麼是你想要返回的實際列?

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 
    ) 

或者:

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 

在這兩種情況下,如果創建日期可以是兩排與同TYPE_ID之間是相同的,那麼你就需要考慮這一點。

我也假設每個類型至少有一個評論存在。如果情況並非如此,那麼你也需要做一個小調整。