首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

获得最新数据

2012-12-18 
取得最新数据某个表,有如下字段:企业编号,年,月,评分要求获得最新年月的所有企业的评分(最新那个)也就是说

取得最新数据
某个表,有如下字段:
企业编号,年,月,评分

要求获得最新年月的所有企业的评分(最新那个)
也就是说,有2013和2012的数据就取2013的,有12月的和11月的就取12月的。
一个企业编号的数据只要一条,就是要最新的这条。
[最优解释]

select * from tb t where not exists (select 1 from tb where 企业编号=t.企业编号 and 年*100+月>t.年*100+t.月)

[其他解释]
如果是2005,那
create table 企业表(企业编号 int,年 int,月 int,评分 int)
insert into 企业表
select 1,2011,3,81 union all
select 1,2012,6,82 union all
select 1,2013,8,83 union all
select 1,2012,12,84 union all
select 1,2011,4,86 union all
select 1,2015,7,87 union all
select 1,2014,6,88 union all
select 1,2013,2,89 union all
select 1,2015,3,90 union all
select 1,2012,9,91 union all
select 1,2011,12,92 union all
select 2,2014,6,88 union all
select 2,2013,2,89 union all
select 2,2015,3,90
go
select * from(
select *,row_number()over(partition by 企业编号 order by 年 desc,月 desc) as rn from 企业表
)t
where rn=1  
/*
企业编号        年           月           评分          rn
----------- ----------- ----------- ----------- --------------------
1           2015        7           87          1
2           2015        3           90          1

(2 行受影响)

*/
go
drop table 企业表

[其他解释]
谁说我不在乎分的啊。
SELECT  *
 FROM    tb a
 WHERE   EXISTS ( SELECT 1
                  FROM   ( SELECT    MAX(年) 年 ,
                                     MAX(月) 月 ,
                                     企业编号
                           FROM      tb
                           GROUP BY  企业编号
                         ) b
                  WHERE  a.月 = b.月


                         AND a.年 = b.年
                         AND a.企业编号 = b.企业编号 )


[其他解释]
呵呵,你都是版主了,还这么在意分数吗?呵呵呵 。。。。我还有 2000多分,都是8 9年前剩下的了。
[其他解释]
引用:
谁说我不在乎分的啊。SQL code??123456789101112SELECT  * FROM    tb a WHERE   EXISTS ( SELECT 1                  FROM   ( SELECT    MAX(年) 年 ,                                     MAX(月) 月 ,          ……

在乎分也要思维严密点吧,你这种方法应该用join才是正确的,exists是错误的,你认为呢版主大人?
[其他解释]
稍稍问一声,您那个表,单个企业在一年的一个月里,会有几条数据?
[其他解释]
稍稍问一声,您那个表,单个企业在一年的一个月里,会有几条数据?

一个月只有一个数据,但是填写的时间不确定。要最后的评分 。。。。
[其他解释]
引用:
引用:谁说我不在乎分的啊。SQL code??123456789101112SELECT  * FROM    tb a WHERE   EXISTS ( SELECT 1                  FROM   ( SELECT    MAX(年) 年 ,                                  ……
为啥要join?单表查询没必要啊,把你的表结构和数据拿出来看看,我还幻想不出你的表和数据的样子。
[其他解释]
另外,您的那个年,月,是什么数据类型?
还有,您这个表就些列了吗,没有个ID什么的列么?
还有,您的MSSQL是什么版本的?
还有,您建的确这个查询语句是放在哪儿执行的?查询分析器?MSSQL Management Studio?
[其他解释]
mssql 2005, 企业编号是整形。年是整形,月是整形,评分是 float
[其他解释]
有ID,但我不想用 ORDER BY ID DESC ,因为有时候会填写上几个月的数据 
[其他解释]
Vidor 的方案应该是可以的,我测试了几十次。都应该没问题的了。
[其他解释]
引用:
稍稍问一声,您那个表,单个企业在一年的一个月里,会有几条数据?

一个月只有一个数据,但是填写的时间不确定。要最后的评分 。。。。

如果一个月只有一个数据,如果这个月份和年份的数据类型是int 型的,则这样可能大概或许能满足您的要求:
select * from tb a
where not exists(select 1 from tb where 企业编号=a.企业编号 and convert(datetime,ltrim(年)+'-'+ltrim(月)+'-01')>convert(datetime,ltrim(a.年)+'-'+ltrim(a.月)+'-01'))
[其他解释]
引用:
引用:稍稍问一声,您那个表,单个企业在一年的一个月里,会有几条数据?


一个月只有一个数据,但是填写的时间不确定。要最后的评分 。。。。
如果一个月只有一个数据,如果这个月份和年份的数据类型是int 型的,则这样可能大概或许能满足您的要求:
select * from tb a
where not exists(select ……



是的,这条应可以,我测试了几个数据都没问题 。谢谢
[其他解释]
引用:
引用:引用:谁说我不在乎分的啊。SQL code??123456789101112SELECT  * FROM    tb a WHERE   EXISTS ( SELECT 1                  FROM   ( SELECT    MAX(年) 年 ,                 ……


对不起啊,是我搞错了,万分抱歉!

热点排行