34,576
社区成员
发帖
与我相关
我的任务
分享
---都在验证 我也借小卒的数据来验证下
IF OBJECT_ID('ta') IS NOT NULL
DROP TABLE ta
GO
CREATE TABLE ta( caseId int,caseNumber varchar(20))
go
insert ta SELECT
1001, 'FS0010'
go
IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
GO
CREATE TABLE tb( caseId int,handleTime datetime)
go
insert tb SELECT
1001 , '2008-08-12 15:00:00' union all select
1001 , '2008-08-13 16:00:00'
select
a.*,t.handletime
from
ta a,tb as t
where
a.caseId=t.caseId
and
not exists(select 1 from tb where caseId=t.caseId and handleTime>t.handleTime)
/*caseId caseNumber handletime
----------- -------------------- ------------------------------------------------------
1001 FS0010 2008-08-13 16:00:00.000
(所影响的行数为 1 行)
*/
IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
GO
--借用小卒的数据
CREATE TABLE tb(caseId int,caseNumber varchar(20))
go
insert tb SELECT
1001, 'FS0010'
go
IF OBJECT_ID('tc') IS NOT NULL
DROP TABLE tc
GO
CREATE TABLE tc(caseId int,handleTime datetime)
go
insert tc SELECT
1001 , '2008-08-12 15:00:00' union all select
1001 , '2008-08-13 16:00:00'
select a.caseId,a.caseNumber,max(b.handleTime)
from tb as a
join tc as b
on a.caseId=b.caseId
group by a.caseId,a.caseNumber
/*
caseId caseNumber
----------- -------------------- -----------------------
1001 FS0010 2008-08-13 16:00:00.000
(1 行受影响)
*/
select
a.*,b.handletime
from
a,b as t
where
a.caseId=t.caseId
and
and handleTime=(select max(handleTime) from b where caseId=t.caseId)
还是习惯编译一下,不然拿不准
select a.caseId,a.caseNumber,b.handleTime from tb a
join
(select * from tc t
where not exists(select * from tc where caseId=t.caseId and handleTime>t.handleTime)
) b
on a.caseId=b.caseId
caseId caseNumber handleTime
----------- -------------------- -----------------------
1001 FS0010 2008-08-13 16:00:00.000
(1 行受影响)
SELECT A.CASEID,A.CASENUMBER,B1.HANDLETIME
FROM A
INNER JOIN B B1 ON A.CASEID=B1.CASEID
AND
NOT EXISTS
(SELECT 1 FROM B B2 WHERE B2.CASEID=B1.CASEID AND B2.HANDLETIME>B1.HANDLETIME)
IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
GO
CREATE TABLE tb( caseId int,caseNumber varchar(20))
go
insert tb SELECT
1001, 'FS0010'
go
IF OBJECT_ID('tc') IS NOT NULL
DROP TABLE tc
GO
CREATE TABLE tc( caseId int,handleTime datetime)
go
insert tc SELECT
1001 , '2008-08-12 15:00:00' union all select
1001 , '2008-08-13 16:00:00'
select a.caseId,b.handleTime from tb a
join
(select * from tc t
where not exists(select * from tc where caseId=t.caseId and handleTime>t.handleTime)
) b
on a.caseId=b.caseId
caseId handleTime
----------- -----------------------
1001 2008-08-13 16:00:00.000
(1 行受影响)
或者
select
b.cardid,max(b.handleTime) as handleTime
from
b
join
a
on
a.caseId=b.caseId
group by
b.cardid
select
a.*,b.handletime
from
a,b as t
where
a.caseId=t.caseId
and
not exists(select 1 from b where caseId=t.caseId and handleTime>t.handleTime)
select B.cardid,max(B.handleTime) handleTime from B join A on A.caseId=B.caseId
group by B.cardid
select A.CaseID,max(b.HandleTime) as HandleTime
from A LEFT jOIN B ON A.caseID = B.caseID
group by A.CaseID
SELECT A.CASEID,A.CASENUMBER,B1.HANDLETIME
FROM A
INNER JOIN B B1 ON A.CASEID=B1.CASEID
AND NOT EXISTS(SELECT 1 FROM B B2 WHERE B2.CASEID=B1.CASEID AND B2.HANDLETIME>B1.HANDLETIME)