22,301
社区成员




SELECT A.*
INTO B
FROM ...
create table #t
(
[Key] int,
cardid varchar(5),
name varchar(5),
[date] date
)
insert into #t
select 1,'001','王天','20140101' union all
select 30,'001','王天','20140702' union all
select 244,'056','陈叶','20140103' union all
select 256,'056','陈叶','20140805'
select count(*) as row,a.[Key],a.cardid, a.name,a.[date]
from #t a
inner join #t b on a.cardid = b.cardid and a.[date]>=b.[date]
group by a.cardid, a.name,a.[date],a.[Key]
order by 1,a.[date]
/*
row Key cardid name date
----------- ----------- ------ ----- ----------
1 1 001 王天 2014-01-01
1 244 056 陈叶 2014-01-03
2 30 001 王天 2014-07-02
2 256 056 陈叶 2014-08-05
(4 行受影响)
*/
INSERT INTO B
SELECT A.*
FROM ( -- 为了防止最小date有多条,再求最小的 key
SELECT t1.cardid,
MIN(A.[key]) [key]
FROM ( -- 求每个 cardid 的最小 date
SELECT cardid,
MIN(date) date
FROM A
GROUP BY cardid
) t1
JOIN A
ON t1.cardid = A.cardid
AND t1.date = A.date
GROUP BY t1.cardid
) t2
JOIN A
ON t2.[key] = A.[key]