Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Поиск по истории  [new]
mezzanine
Member

Откуда:
Сообщений: 157
Добрый день.

Есть таблица с историей (audit_transaction_data) со структурой общей для всех необходимых таблиц, т.е. строка хранится в вертикальном виде. Помогите с запросом который найдет последнего выбранного пользователя (ASSIGNEE_USER_ID) для указной группы (ASSIGNEE_GROUP_ID) но группа должна быть тоже последняя.
В приведенном ниже наборе строк для группы 57 это должна быть строка:
audit_transaction_idtable_namecolumn_nameold_valuenew_value
1544ASSIGNEEASSIGNEE_USER_ID35040


В этой строке началась группа 57 (с 56 на 57):
audit_transaction_idtable_namecolumn_nameold_valuenew_value
1387ASSIGNEEASSIGNEE_GROUP_ID5657

В этой строке закончилась группа 57 (с 57 на 56):
audit_transaction_idtable_namecolumn_nameold_valuenew_value
1545ASSIGNEEASSIGNEE_GROUP_ID5756


Только кусочек, между строками будет записи от других таблиц.
audit_transaction_idtable_namecolumn_nameold_valuenew_value
1626ASSIGNEEASSIGNEE_USER_ID15
1625ASSIGNEEASSIGNEE_USER_ID1
1545ASSIGNEEASSIGNEE_GROUP_ID5756
1545ASSIGNEEASSIGNEE_TEXTText field
1545ASSIGNEEASSIGNEE_USER_ID40
1544ASSIGNEEASSIGNEE_USER_ID35040
1543ASSIGNEEASSIGNEE_USER_ID355350
1387ASSIGNEEASSIGNEE_TEXTText field
1387ASSIGNEEASSIGNEE_GROUP_ID5657
1387ASSIGNEEASSIGNEE_USER_ID41355
1386ASSIGNEEASSIGNEE_USER_ID41
1384ASSIGNEEASSIGNEE_TEXTText field
1384ASSIGNEEASSIGNEE_GROUP_ID5756
19 июн 16, 18:26    [19311472]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по истории  [new]
aleks2
Guest
;with 
--В этой строке закончилась группа 57 (с 57 на 56):
  e as ( select top(1) * from audit_transaction_data where column_name = 'ASSIGNEE_GROUP_ID' and old_value = 57 and new_value <> old_value order by audit_transaction_id desc )
--В этой строке началась группа 57 (с 56 на 57):
, b as ( select top(1) b.* from audit_transaction_data as b cross join e where b.column_name = 'ASSIGNEE_GROUP_ID' and b.old_value = e.new_value and b.new_value = 57 and b.audit_transaction_id < e.audit_transaction_id order by b.audit_transaction_id desc )
-- В приведенном ниже наборе строк для группы 57 это должна быть строка:
, x as ( select top(1) x.* from audit_transaction_data as x 
                           inner join e  on x.audit_transaction_id > b.audit_transaction_id 
                           inner join b  on x.audit_transaction_id < e.audit_transaction_id
                           where x.column_name = 'ASSIGNEE_USER_ID' order by x.audit_transaction_id desc )
select * from x                           
19 июн 16, 19:46    [19311663]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по истории  [new]
mezzanine
Member

Откуда:
Сообщений: 157
aleks2,

Спасибо. Дальше уже допилю под нужды.
19 июн 16, 22:12    [19312087]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить