Используя SQL Server 2005, у меня есть таблица, в которой регистрируются определенные события, и мне нужно создать запрос, который возвращает только очень конкретные результаты. Ниже приведен пример:
<b>Log:</b>
Log_ID | FB_ID | Date | Log_Name | Log_Type
7 | 4 | 2007/11/8 | Nina | Critical
6 | 4 | 2007/11/6 | John | Critical
5 | 4 | 2007/11/6 | Mike | Critical
4 | 4 | 2007/11/6 | Mike | Critical
3 | 3 | 2007/11/3 | Ben | Critical
2 | 3 | 2007/11/1 | Ben | Critical
Запрос должен выполнять следующее: возвращать ТОЛЬКО по одной строке для каждого FB_ID, но это должна быть та строка, в которой Log_Name изменено впервые, или, если имя никогда не изменяется, то первая строка с датой.
С точки зрения непрофессионала, мне нужно это, чтобы просмотреть БД, чтобы проверить для каждого случая, когда ответственность за дело (FB_ID) была передана другому человеку, а в случае, если это никогда не происходит, просто получите имя исходного регистратора.
В приведенном выше примере я должен получить строки (Log_ID) 2 и 6.
Это вообще возможно? Сейчас идет дискуссия о том, была ли БД сделана неправильно. :)
Я предполагаю, что мне нужно каким-то образом сохранить первое полученное имя Log_Name в переменной, а затем сравнить его с условием IF и т. Д. Однако я не знаю, как сделать это с SQL.
Редактировать: Обновлена дата. И чтобы уточнить это, правильный результат будет выглядеть так:
Log_ID | FB_ID | Date | Log_Name | Log_Type
6 | 4 | 2007/11/6 | John | Critical
2 | 3 | 2007/11/1 | Ben | Critical
Это не первая дата для FB_ID, за которой я следую, но строка, в которой Log_Name изменяется от оригинала.
Первоначально FB_ID 4 принадлежал Майку, но запрос должен возвращать строку, в которой он переходит к Джону. Тем не менее, он НЕ должен возвращать строку, где он движется дальше, к Нине, потому что первое изменение ответственности уже произошло, когда Джон получил его.
В случае Бена с FB_ID 3 регистратор никогда не изменяется, поэтому должен быть возвращен первый ряд для Бена.