Выберите только изменения значения из таблицы журнала аудита
В MS SQL Server 2008 R2 у меня есть таблица Foo, и для каждой вставки и обновления в Foo я также вставляю в FooAuditLog дату, пользователя, PK FooId и несколько других столбцов Foo, включая одно числовое значение, назовите это CXP.
Теперь мне нужно получить историю изменений в cxp с течением времени для данного FooId. Но можно сохранить Foo без изменения cxp, и мне нужно игнорировать эти значения.
Например, если записи журнала аудита для определенного Foo (т.е. select date, user, cxp from FooAuditLog where fooId=17
) выглядит так:
Date User Cxp
-------------------------
10/26 Fred 42
10/28 George 38
11/7 Tom 38
11/9 Fred 38
11/12 Joe 33
11/14 Tom 33
11/18 George 38
Затем мне нужно изменить запрос, чтобы он возвращал только:
Date User Cxp
-----------------------------
10/26 Fred 42
10/28 George 38
11/12 Joe 33
11/18 George 38
И игнорируйте записи 11/7, 11/9 и 11/14. Я считал select distinct (cpx) ... group by date
но мне нужно захватить запись, где значение возвращается к предыдущему значению.
1 ответ
Вам нужно получить предыдущее значение. Эта версия использует синтаксис MySQL с коррелированным подзапросом для получения результата:
select t.*
from (select t.*,
(select cxp from t t2 where t2.date < t.date order by date desc limit1
) as prevcxp
from t
) t
where prevcxp is NULL or prevcxp <> cxp
В других базах данных вы можете использовать lag()
вместо подзапроса limit
может быть заменен top
или даже fetch first 1 row
,