使用SQL获取包含2个或更多相关条目的最新记录

时间:2010-07-08 14:21:17

标签: sql sql-server-2008

我继承了一个有趣的表结构。此表结构如下所示:

grouptable将

  • ID
  • 名称
  • 描述

GroupItem

  • ID
  • 的GroupID
  • 名称
  • CreatedBy
  • CreationDate

我需要获取特定用户创建的三个最新的GroupItem元素。扭曲带有与GroupID相关的要求。我检索的三个GroupItem元素必须至少有一个具有相同GroupID的其他 GroupItem元素。

换句话说,我正在尝试检索具有至少两个GroupItem元素的三个最新GroupTable,其中至少有一个GroupItem元素已由特定用户创建。

我不知道如何在SQL中完成此任务。我正在使用SQL Server 2008而且我一直在做空。

2 个答案:

答案 0 :(得分:1)

SELECT TOP 3
    GI1.ID,
    GI1.GroupID,
    GI1.Name,
    GI1.CreatedBy,
    GI1.CreationDate
FROM
    GroupTable GT
INNER JOIN GroupItems GI1 ON
    GI1.GroupID = GT.ID AND
    GI1.CreatedBy = @user
WHERE
    EXISTS
    (
        SELECT *
        FROM
            GroupItems GI2
        WHERE
            GI2.GroupID = GT.ID AND
            GI2.ID <> GI1.ID
    )
ORDER BY
    GT1.CreationDate DESC

答案 1 :(得分:0)

由于Tom H.在为第一个定义构建解决方案方面做得更快,我会做第二个:)

SELECT TOP 3
    GT.ID
FROM
    GroupTable GT
    INNER JOIN GroupItem GI1 ON GI1.GroupID = GT.ID
WHERE
    GT.ID IN 
    (
    SELECT GroupID
    FROM
        GroupItem GI2
    WHERE
        GI2.ID = GT.ID AND
        GI2.CreatedBy = @user
    )
GROUP BY 
    GT.ID
HAVING 
    Count(*) >= 2
ORDER BY
    MAX(GI1.CreationDate) DESC

主要区别在于此查询按GroupTable进行分组,因此在同一个表被多次返回时不会出现这种情况(这种情况发生在Tom H.答案/在问题的第一个定义中是必需的。)