在Sql中,如何选择最后五个唯一的行和行不重复...帮助我 [英] In Sql,How Can I Select Last Five Unique Row And Rows Are Not Repeated..Help Me

查看:70
本文介绍了在Sql中,如何选择最后五个唯一的行和行不重复...帮助我的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 fbalance fdate facno 
10 000 00 21/12/2013 010001801000007
15 000 00 21/01/2014 010001801000007
20 000 00 15/01/2014 010001801000007
29 550 00 21/01/2014 010001801000007
34 550 00 21 / 02/2014 010001801000007
4 000 00 21/12/2013 010001801000008
8 000 00 21/12/2013 010001801000008
12 000 00 21/01/2014 010001801000008
16 000 00 21/02/2014 010001801000008
50 000 00 22/11/2012 010001801000009
100 000 00 22/12/2012 010001801000009
70 000 00 22/01/2014 010001801000010
80 000 00 22/02/2014 010001801000010
1 000 00 23/11/2013 010001801000012
1 500 00 23/12/2013 010001801000012
2 000 00 23/01/2014 010001801000012
2 500 00 23/02/2014 010001801000012
3 000 00 23/03/2014 010001801000012
3 ,< span class =code-digit> 500
00 23/04/2014 010001801000012
500 00 23/01/2014 010001801000013

解决方案

您可以尝试这样的事情。

但结果返回,来自预期的额外记录,但我假设它可能已从列表中遗漏。

   -   设置数据;  
声明 @ f table (fbalance 十进制 10 2 ),fdate datetime ,facno varchar 50 ));
插入 进入 @ f 10000 00 ' 2013年12月21日'' 010001801000007' );
插入 进入 @ f 15000 00 ' 21 jan 2014'' 010001801000007' );
插入 进入 @ f 20000 00 ' 15 jan 2014'' 010001801000007' );
插入 进入 @ f 29550 00 ' 21 jan 2014'' 010001801000007' );
插入 进入 @ f 34550 00 ' 21 feb 2014'' 010001801000007' );
插入 进入 @ f 4000 00 ' 2013年12月21日'' 010001801000008' );
插入 进入 @ f 8000 00 ' 2013年12月21日'' 010001801000008' );
插入 进入 @ f 12000 00 ' 21 jan 2014'' 010001801000008' );
插入 进入 @ f 16000 00 ' 21 feb 2014'' 010001801000008' );
插入 进入 @ f 50000 00 ' 22 nov 2012'' 010001801000009' );
插入 进入 @ f 100000 00 ' 2012年12月22日'' 010001801000009' );
插入 进入 @ f 70000 00 ' 2014年1月22日' 010001801000010' );
插入 进入 @ f 80000 00 ' 22 feb 2014'' 010001801000010' );
插入 进入 @ f 1000 00 ' 23 nov 2013'' 010001801000012' );
插入 进入 @ f 1500 00 ' 2013年12月23日'' 010001801000012' );
插入 进入 @ f 2000 00 ' 23 jan 2014'' 010001801000012' );
插入 进入 @ f 2500 00 ' 23 feb 2014'' 010001801000012' );
插入 进入 @ f 3000 00 ' 2014年3月23日'' 010001801000012' );
插入 进入 @ f 3500 00 ' 23 apr 2014'' 010001801000012' );
插入 进入 @ f 500 00 ' 23 jan 2014'' 010001801000013' );

- 获取每个facno的最大fdate记录
< span class =code-keyword>选择

f。*
来自 @f f
内部 加入
选择 facno,max(fdate)fdateMax
来自 @ f
group by facno
)fMaxDt

f.facno = fMaxDt.facno

f.fdate = fMaxDt.fdateMax
order by 3
;



   -    result  
fbalance fdate facno
34550 00 2014-02-21 010001801000007
16000 00 2014-02-21 010001801000008
100000 00 2012-12-22 010001801000009
80000 00 2014-02-22 010001801000010 - 来自预期的额外记录
3500 00 2014-04-23 010001801000012
500 00 2014-01-23 01 0001801000013
- 注意:facno和fdate必须是唯一的,以便查询返回一个记录每个facno和max facno


使用它:

 选择 MAX( convert  datetime ,fdate,< span class =code-digit> 103 )),facno,max(fbalance)来自 tbl_test1  group   by  facno 





还有一件事你必须删除 fbalance 列中的逗号(,),不能将其转换为浮点数。


在查询中使用distinct和order by

fbalance    fdate         facno
10,000.00  21/12/2013     010001801000007
15,000.00  21/01/2014     010001801000007
20,000.00  15/01/2014     010001801000007
29,550.00  21/01/2014     010001801000007
34,550.00  21/02/2014     010001801000007
4,000.00   21/12/2013     010001801000008
 8,000.00  21/12/2013     010001801000008
12,000.00  21/01/2014     010001801000008
16,000.00  21/02/2014     010001801000008
50,000.00  22/11/2012     010001801000009
100,000.00 22/12/2012     010001801000009
70,000.00  22/01/2014     010001801000010
80,000.00  22/02/2014     010001801000010
1,000.00   23/11/2013     010001801000012
1,500.00   23/12/2013     010001801000012
2,000.00   23/01/2014     010001801000012
2,500.00   23/02/2014     010001801000012
3,000.00   23/03/2014     010001801000012
3,500.00   23/04/2014     010001801000012
500.00     23/01/2014     010001801000013

解决方案

You could try something like this.
But the result return, an extra record from the expected, but I am assuming it may have been missed from the list.

--setup data;
declare @f table (fbalance decimal(10,2), fdate datetime, facno varchar(50));
insert into @f values (10000.00, '21 dec 2013', '010001801000007');
insert into @f values (15000.00, '21 jan 2014', '010001801000007');
insert into @f values (20000.00, '15 jan 2014', '010001801000007');
insert into @f values (29550.00, '21 jan 2014', '010001801000007');
insert into @f values (34550.00, '21 feb 2014', '010001801000007');
insert into @f values (4000.00, '21 dec 2013', '010001801000008');
insert into @f values (8000.00, '21 dec 2013', '010001801000008');
insert into @f values (12000.00, '21 jan 2014', '010001801000008');
insert into @f values (16000.00, '21 feb 2014', '010001801000008');
insert into @f values (50000.00, '22 nov 2012', '010001801000009');
insert into @f values (100000.00, '22 dec 2012', '010001801000009');
insert into @f values (70000.00, '22 jan 2014', '010001801000010');
insert into @f values (80000.00, '22 feb 2014', '010001801000010');
insert into @f values (1000.00, '23 nov 2013', '010001801000012');
insert into @f values (1500.00, '23 dec 2013', '010001801000012');
insert into @f values (2000.00, '23 jan 2014', '010001801000012');
insert into @f values (2500.00, '23 feb 2014', '010001801000012');
insert into @f values (3000.00, '23 mar 2014', '010001801000012');
insert into @f values (3500.00, '23 apr 2014', '010001801000012');
insert into @f values (500.00, '23 jan 2014', '010001801000013');

--get max fdate record for each facno
select 
    f.*
from @f f
inner join (
          select facno, max(fdate) fdateMax
          from @f
          group by facno
    ) fMaxDt
    on 
          f.facno = fMaxDt.facno
          and 
          f.fdate = fMaxDt.fdateMax 
order by 3
;


--result
fbalance		fdate			facno
34550.00		2014-02-21		010001801000007
16000.00		2014-02-21		010001801000008
100000.00		2012-12-22		010001801000009
80000.00		2014-02-22		010001801000010	--Extra record from the expected
3500.00			2014-04-23		010001801000012
500.00			2014-01-23		010001801000013
--note: facno and fdate need to be unique for the query to return one record for each facno and max facno


use this :

select  MAX(convert(datetime,fdate,103)),facno,max(fbalance ) from tbl_test1 group by facno



and one more thing is you must Remove Comma (,) at your fbalance Column you can't Cast into float.


Use distinct and order by in your query.


这篇关于在Sql中,如何选择最后五个唯一的行和行不重复...帮助我的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆