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

Это продолжение этого вопроса .Я работал все выходные над этой проблемой, не решая ее.Я в полном недоумении.По сути, я унаследовал интересную структуру таблицы.Эта структура таблицы выглядит следующим образом:

GroupTable

* ID
* Name
* Description

GroupItem

* ID
* GroupID
* Name
* CreatedBy
* CreationDate

OpenGroupItem

* ID
* GroupID
* Name
* CreatedBy
* CreationDate

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

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

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

1 Ответ

0 голосов
/ 12 июля 2010

Моя первая рекомендация - исправить структуру вашей базы данных. Нет необходимости, чтобы они были в двух таблицах с одинаковой структурой. Одна таблица с полем для указания того, является ли она открытой, является лучшим дизайном. Чтобы не допустить поломки, вы называете таблицу чем-то новым, а затем создаете представление для GroupItem (с тем же именем, что и у этой таблицы) и одно представление для OpenGroupITem, которое выбирает только те записи, которые вы хотите для каждого поля на основе добавленного вами onteh. Вам также необходимо изменить процесс, который перемещает записи из открытого в не открытое состояние, если у вас есть такая вещь.

Как только это будет сделано, запрос данных будет тривиальным.

Если вы не можете этого сделать, лучшее решение - объединить все две таблицы вместе и затем выполнить запрос. Если вам придется часто выполнять этот тип запроса, сделайте UNOIN ALL представлением. Если это редкое явление, сделайте его производной таблицей или таблицей CTE или временной таблицей.

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