Получение самых последних записей с 2 ​​или более связанными записями с SQL - PullRequest
0 голосов
/ 08 июля 2010

Я унаследовал интересную структуру таблицы.Эта структура таблицы выглядит следующим образом:

GroupTable

  • ID
  • Имя
  • Описание

GroupItem

  • ID
  • GroupID
  • Имя
  • CreatedBy
  • CreationDate

Мне нужно получитьтри самых последних элемента GroupItem, созданные конкретным пользователем.Твист приходит с требованием, связанным с GroupID.Три элемента GroupItem, которые я получаю, должны иметь как минимум один другой элемент GroupItem с тем же GroupID.

Другими словами, я пытаюсь получить три самых последних GroupTable, в которых есть как минимум два элемента GroupItem, где хотя бы один из этих элементов GroupItem был создан конкретным пользователем.

Iпонятия не имею, как сделать это в SQL.Я использую SQL Server 2008, и у меня все меньше возможностей.

Ответы [ 2 ]

1 голос
/ 08 июля 2010
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
0 голосов
/ 08 июля 2010

Поскольку Том Х. был намного быстрее при создании решения для вашего первого определения, я сделаю второе:)

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, поэтому не может быть ни одного случаякогда одна и та же таблица возвращается более одного раза (что происходит в Томе Х. ответ / требуется в первом определении проблемы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...