我继承了一个有趣的表结构。此表结构如下所示:
我需要获取特定用户创建的三个最新的GroupItem元素。扭曲带有与GroupID相关的要求。我检索的三个GroupItem元素必须至少有一个具有相同GroupID的其他 GroupItem元素。
换句话说,我正在尝试检索具有至少两个GroupItem元素的三个最新GroupTable,其中至少有一个GroupItem元素已由特定用户创建。
我不知道如何在SQL中完成此任务。我正在使用SQL Server 2008而且我一直在做空。
答案 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.答案/在问题的第一个定义中是必需的。)