在数据表t1中存在记录
classname | classnum | studentname | latetime | register | reason |
高二(3)班 | 06023 | 王强 | 8.12 | 8.15 | 班车没赶上 |
高二(3)班 | 06023 | 王强 | 8.17 | 8.22 | 又没赶上 |
高二(6)班 | 06026 | 陈东 | 817 | 8.22 | 掉水沟里了 |
高二(3)班 | 06023 | 王强 | 8.12 | 8.17 | null |
要得到的记录如下:
classname | classnum | studentname | latetime | register | reason |
高二(3)班 | 06023 | 王强 | 8.17 | 8.22 | 又没赶上 |
高二(6)班 | 06026 | 陈东 | 817 | 8.22 | 掉水沟里了 |
高二(3)班 | 06023 | 王强 | 8.12 | 8.17 | 班车没赶上 |
就是如果有两笔资料都一样只是register和reason不同,那么取register大的一笔。我的做法是
先创建临时表,然后再通过表连接得到对应的reason
create table #cards (
DeptName nvarchar(50),
EmpyNo NVARCHAR(15),
Uname nvarchar(20),
ADate nvarchar(50),
MaxIdate datetime
)
insert #cards
select t1.DeptName,t1.EmpyNO,t1.Uname,convert(nvarchar(100),t1.ADate,102) as ADate,max(t1.idate) as maxidate1
from [FlowBusinessData].[dbo].[AOC_Abnormal_Main] t1
where PCode_level in('12','13') and month(adate)=month(getdate())-1 and inflow='T'
group by t1.ADate ,t1.DeptName,t1.EmpyNO,t1.Uname
select t2.DeptName,t2.EmpyNO,t2.Uname,t2.empyno,convert(nvarchar(100),t2.ADate,102) as ADate,t2.Errtype,t2.CardTS,t2.CardTE,t2.idate,t2.BAK
from [FlowBusinessData].[dbo].[AOC_Abnormal_Main] t2 ,#cards
where #cards.empyno=t2.empyno and #cards.adate=convert(nvarchar(100),t2.ADate,102) and #cards.MaxIdate=t2.idate
group by t2.ADate ,t2.empyno,t2.DeptName,t2.EmpyNO,t2.Uname,t2.Errtype,t2.CardTS,t2.CardTE,t2.BAK,t2.idate