当前位置: 代码迷 >> Sql Server >> 怎么快速查找最近发生变化的数据
  详细解决方案

怎么快速查找最近发生变化的数据

热度:70   发布时间:2016-04-24 10:59:33.0
如何快速查找最近发生变化的数据
数据库为SQL SERVER 2008
现有一表TABLE,记录公司员工的部门变动与职务变动
表结构如下:
ID            NAME             DEPT(部门)              DUTY(职位)            TIME(变动时间)
0              TOM                IT                                    员工                                2011-4-15
0              TOM                IT                                    项目经理                        2013-4-15
0              TOM                IT                                    部门经理                        2014-4-15
1              RAY                IT                                     员工                                2013-4-15
1              RAY                HR                                  员工                                2014-4-15

如何快速查出所有最近两条记录中DURY发生变动的员工的记录
即:
TOM最近两条记录DUTY产生变化,需要被查询出来,而RAY的DUTY没有变化,则不需要

我现在用的语句是:
SELECT  * FROM TABLE AS A
WHERE (SELECT TOP 1 DUTY FROM TABLE WHERE ID = A.ID ORDER BY TIME DESC)
<> (SELECT TOP 1 FROM  (SELECT TOP 2 DUTY FROM TABLE WHERE ID = A.ID ORDER BY TIME DESC) ORDER BY TIME)

虽然能查询出结果,但是慢,TABLE表一共有12000行记录,执行上述查询要用30秒左右。
不知道有没有快一点的方法?
------解决方案--------------------
WITH a AS (
SELECT  * , lag(duty) OVER(ORDER BY id ,time) AS duty1 FROM TABLE AS A )--有限定條件可以這邊先加上

SELECT * FROM a WHERE duty <> duty1



試試看會不會比較快
------解决方案--------------------
SELECT distinct A.NAME ,
        A.dept ,
        A.TIME ,
        A.duty
FROM    dbo.TB
        CROSS APPLY ( SELECT TOP 2
                                B.NAME ,
                                B.dept ,
                                B.duty ,
                                B.TIME
                      FROM      TB B
                      WHERE     tb.NAME = B.NAME
  相关解决方案