表如下图,现在的要求是给定一个日期比如2016/12/28,筛选出每个账户余额日期离得最近的一条数据,每个账户只留一条数据,只给出这张表
最终结果是:
我知道了,本表和本表比较,大概如下图
先比较,然后排序取第一条就可以了嘛。
这问题描述也是醉了。
select * from (SELECT * FROM account_balance ACC WHERE ACC.余额日期
< str_to_date('2016-12-28','%Y-%m-%d') ORDER BY ACC.余额日期
DESC) acc1 GROUP BY acc1.账号
新建一张表来存储新的数据:newTable
declare @ActID varchar(50)
declare @Difer varchar(50)
DECLARE AutoMergeRow CURSOR FOR
select acountNum, min(datediff(day,balanceDate,'2016-12-28')) as difer from MergeAcountByDate group by acountNum
OPEN AutoMergeRow;
FETCH NEXT FROM AutoMergeRow into @ActID,@Difer;
WHILE @@FETCH_STATUS = 0
BEGIN
insert into newTable(acountNum,balance,balanceDate)
select acountNum, balance, balanceDate from
(select acountNum, balance, balanceDate, datediff(day,balanceDate,'2016-12-28')as difer2 from MergeAcountByDate
where acountNum=@ActID and datediff(day,balanceDate,'2016-12-28')=@Difer) as a
FETCH NEXT FROM AutoMergeRow into @ActID,@Difer;
END
CLOSE AutoMergeRow
DEALLOCATE AutoMergeRow