8

原谅标题,我想不出简短而中肯的东西...

我有一个表“更新”,其中包含三列,文本,类型 ID,创建 - 文本是文本字段,类型 ID 是来自“类型”表的外键,创建是时间戳。用户正在输入更新并选择它对应的“类型”。

有一个相应的“类型”表,其中包含“id”和“name”列。

我试图最终得到一个结果集,其中包含与“类型”表中的行数一样多的结果集,以及类型中特定行的 updates.text 中的最新值。因此,如果我有 3 种类型,将返回 3 行,每种类型一行,以及相关类型的最新 updates.text 值。

有任何想法吗?

谢谢,

约翰。

4

3 回答 3

15
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
于 2010-01-18T17:24:59.567 回答
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
于 2010-01-18T17:25:23.640 回答
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 的两行之间可以相同,那么您需要考虑这一点。

我还假设每种类型至少存在一个评论。如果不是这种情况,那么您也需要对此进行微调。

于 2010-01-18T17:26:50.840 回答