表如下图,现在的要求是给定一个日期比如2016/12/28.......

表如下图,现在的要求是给定一个日期比如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