sql server查找同一表的行之间的差异
我有一个表employees,对于给定的empid,我想列出时间、用户名以及与上一次相比发生的变化。同样对于列'req_type',我想为0写普通,为1写重要,为值2写紧急sql server查找同一表的行之间的差异,sql,sql-server,Sql,Sql Server,我有一个表employees,对于给定的empid,我想列出时间、用户名以及与上一次相比发生的变化。同样对于列'req_type',我想为0写普通,为1写重要,为值2写紧急 empid Time req_type token requester username comment ------------------------------------------------------------------------------
empid Time req_type token requester username comment
------------------------------------------------------------------------------------------
10 05-01-2014 10:04:00 0 10 grusel ann
10 05-01-2014 11:11:00 1 8 ben check site www:\\abc.com
10 05-01-2014 10:10:00 0 2 ann
12 06-01-2014 13:00:01 0 2 Jeena bill check www:\\someerror.com
12 07-02-2014 14:00:00 1 6 Mike bill
Select语句应该为empid=10提供3行,如下所示
Time Username Changed
---------------------------------------------------------------------------
05-01-2014 11:11:00 ben 'req_type' updated from (normal) to (important),
'token' updated from 2 to 8,
'requester' deleted,
'comment' added check site www:\\abc.com
05-01-2014 10:10:00 ann 'token' updated from 10 to 2,
'requester' added grusel
05-01-2014 10:04:00 ann First entry
Time Username Changed
----------------------------------------------------------------------------
7-02-2014 14:00:00 bill 'req_type' updated from (normal) to (important),
'token' changed from 2 to 6,
'requester' changed from Jeena to Mike,
'comment' deleted
6-01-2014 13:00:01 bill First entry
类似地,Select语句应该为empid=12提供2行,如下所示
Time Username Changed
---------------------------------------------------------------------------
05-01-2014 11:11:00 ben 'req_type' updated from (normal) to (important),
'token' updated from 2 to 8,
'requester' deleted,
'comment' added check site www:\\abc.com
05-01-2014 10:10:00 ann 'token' updated from 10 to 2,
'requester' added grusel
05-01-2014 10:04:00 ann First entry
Time Username Changed
----------------------------------------------------------------------------
7-02-2014 14:00:00 bill 'req_type' updated from (normal) to (important),
'token' changed from 2 to 6,
'requester' changed from Jeena to Mike,
'comment' deleted
6-01-2014 13:00:01 bill First entry
这是一个部分答案,我们必须将最终输出转换为由emp id分隔的文本
CREATE TABLE emp (id int , [time] datetime, req_type int, token int )
INSERT INTO emp VALUES (1, GETDATE(), 0,1)
INSERT INTO emp VALUES (1, GETDATE()-1, 1,1)
INSERT INTO emp VALUES (1, GETDATE()-2, 1,3)
;WITH cte AS
(
SELECT *, ROW_NUMBER() OVER( PARTITION BY id ORDER BY time asc) rn FROM emp
),cte2 AS (
SELECT c2.*, CASE WHEN c.req_type != c2.req_type THEN 'Req changed from'+CONVERT(VARCHAR,c2.req_type)+' to '+CONVERT(VARCHAR,c.req_type) ELSE '' END AS reqc,
CASE WHEN c.token != c2.token THEN 'Token changed from' +CONVERT(VARCHAR,c2.token)+' to '+CONVERT(VARCHAR,c.token) ELSE '' END AS tokenc
FROM cte c INNER join cte c2 ON c2.rn+1 = c.rn
)
SELECT id,time,req_type,reqc+tokenc AS changes FROM cte2
粘贴在您的尝试,我们可以帮助您调整它。您还提到了2个RDBMS,是哪一个?请共享您迄今为止尝试过的SQL。在empid和行_编号-1上将表自身连接起来,然后应用您的业务规则来构造更改后的值。使用cte AS会产生编译错误。在最后一句话中,reqc+tokenc是什么意思?好的,而不是;使用cts作为语句,现在更改为select*from select*,td asc rn from employee AS cte根据id顺序将行数超额分配,但现在它在select*,行数语句上给出了语法错误