楼主:
akiaki54 (喝酒做爱不谈恋爱)
2016-03-27 21:58:22※ 引述《seabok (思念,留在1999)》之铭言:
: 数据库名称:MS SQL
: 数据库版本:2008
: 内容/问题描述:
: 请问各位贤拜:
: 有一Table A如下:
: ID UPDate OldValue NewValue
: 001 2016/3/24 AAA BBB
: 002 2016/3/23 CCC DDD
: 002 2016/3/24 DDD CCC
: 需求是想捞出在日期区间内有异动的资料,也就是最终的OldValue <> NewValue。
: 可是在表中第2、3列,ID=002的资料在3/23先是自CCC改成DDD,
: 然后在3/24又自DDD改回CCC,最终结果其实是没有异动。
: 请问SQL该如何下才能直接排除这种情形呢?(也就是只有ID=001这笔符合)
: 先感谢大家了~
另一种解法:
;WITH A
AS
(
SELECT *
, FIRST_VALUE(oldvalue) OVER (PARTITION BY ID ORDER BY [Update] ROWS
UNBOUNDED PRECEDING) AS 'First'
, LAST_VALUE(newvalue) OVER (PARTITION BY ID ORDER BY [Update] ROWS
BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS 'Last'
FROM table1
)
SELECT *
FROM A
WHERE First <> Last
我用SQL 2014, 2008 能不能跑要试试看。