sql server 分组求最大值所在行

有下面的表:
作者 图书ID 图书名称 出版日期
a 1 xxxxx 2008-1
a 2 xxxxx 2009-1
b 5 xxxxx 2007-1
b 8 xxxxx 2008-2
a 10 xxxxx 2009-5
b 20 xxxxx 2009-8

想得到如下的结果:
作者名称 图书ID 最近出版图书名称 出版日期
a 10 xxxxxx 2009-5
b 20 xxxxxx 2009-8

SQL语句该如何写呢?
这只是截取一些数据,实际上数据很多,作者有许多,不是只有2个,所以top 2 不可行。

----做人要以诚信为本,二楼的根本就没测试过,哪里有这样写group by 的呢。。。

---楼主想要的是这个。
create table #t(作者 nvarchar(10) ,图书ID int,图书名称 nvarchar(10), 出版日期 nvarchar(10))
insert #t
select 'a',1,'xxxxx','2008-1' union all
select 'a',2,'xxxxx','2009-1' union all
select 'b',5,'xxxxx','2007-1' union all
select 'b',8,'xxxxx','2008-2' union all
select 'a',10,'xxxxx','2009-5' union all
select 'b',20,'xxxxx','2009-8'
go

---关键查询
select * from #t,(
select 作者,max(出版日期) as '出版日期'
from #t
group by 作者) s
where #t.作者=s.作者 and #t.出版日期=s.出版日期

--删除临时数据
drop table #t

--以上在sql 2005测试通过
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-08-19
select 作者名称,图书ID,最近出版图书名称,max(出版日期) as 出版日期 from table group by 作者名称,最近出版图书名称,出版日期

以上,希望对你有所帮助
第2个回答  2009-08-19
以下是查询各位作者最后一个日期出版的图书:

select a.作者名称,a.图书ID,a.图书名称 as 最近出版图书名称,a.出版日期 from 表名 a,( select 作者名称,max(出版日期) as 出版日期 from 表名 group by 作者名称 ) b where a.作者名称=b.作者名称 and a.出版日期=b.出版日期
第3个回答  2009-08-19
SELECT A.* FROM 图书表 AS A,
(SELECT MAX(出版日期) AS MDate, 作者 FROM 图书表 GROUP BY 作者) AS B
WHERE A.出版日期 = B.MDate
第4个回答  2009-08-19
ytbelwxg 写的不错

如果你希望每个作者的最新著作的话 要按作者分组( group by 作者),响应的要有聚合函数(如:MAX())

sql查询 分组后 每组某字段值最大的一行所有列
按照员工ID分组,取出ID值最大的一行 1、第一个方法,需要考虑ID有重复值的问题,如果最大值存在重复值,那么结果也重复。SELECT * FROM 员工信息变化表 T1 WHERE id = (SELECT Max (id) FROM 员工信息变化表 T2 WHERE T1.员工ID = T2.员工ID)2、第二个方法:该语句是在SQL Server中...

sql server 分组求最大值所在行
---做人要以诚信为本,二楼的根本就没测试过,哪里有这样写group by 的呢。。。---楼主想要的是这个。create table #t(作者 nvarchar(10) ,图书ID int,图书名称 nvarchar(10), 出版日期 nvarchar(10))insert #t select 'a',1,'xxxxx','2008-1' union all select 'a',2,'xxxxx','2009...

Sql Server 查询,一共三列,怎样查出第一个列值相同,第二列值最大的第...
《按某列分组,求另一列最大或最小值所在整行数据的方法》利用子查询,试一下,很好用的(a1可根据需要去掉):select a2,a1 from tablename where taborder=(select max(taborder) from tablename a where a.a2=tablename.a2)查出结果为 a,2 b,5 c,6 ...

SQL SERVER分组后查询最大日期的ID
用分析函数row_number来给分组内的记录编号,然后取编号值为1的记录即可。select s.*from ( select v.*, row_number() over (partition by b order by c desc) as order_num from #b v) swhere s.order_num = 1

SQL Server中如何分组查询最大值
D,ROW_NUMBER()OVER(PARTITION BY A ORDER BY A,B DESC) RN from A)19 WHERE RN=1 20 \/ A B C D --- --- -- -- 1 3 c3 d3 4 0 c4 d4 5 2 c6 d6 6 4 c8 d8 SQL>

sql server分组求最大值(100分)
SQL> SQL> select no,name,max(ht)2 from a 3 group by no,name 4 ;NO NAME MAX(HT)--- --- --- 100 张三 1986-5-1 101 李四 1999-5-1 SQL> insert into a values(100,'张三',to_date('1999-5-1','yyyy-mm-dd'));1 row inserted SQL> select * from...

sql 分组查最大的两个
DB2\/ ORACLE\/ SQL SERVER 2005以上可以用这个 SELECT A,B,C FROM (SELECT A, B,C, ROW_NUMBER() OVER(PARTITION BY A ORDER BY B desc, C DESC) rk FROM tab) t WHERE rk <= 2

sql server 2008中如何取某字段最大值所在的一条数据(多个字段)_百度知...
select * from ( select id,name,score,date,ROW_NUMBER() over(PARTITION by name order by score desc,date desc) as num from tablename ) T where T.num <= 1 order by name

sql server中如何查询某行中列最大的,并将这行中其他列显示出来_百度知 ...
SELECT top 1 a.cateid,COUNT(*) t1,b.cate FROM [ LinShi ].[ dbo ].[ temp_Report883 ] AS a JOIN clipping.dbo.categories AS b ON a.cateid = b.cateid WHERE diyuid = 2579 GROUP BY a.cateid,b.cate order by count(*) desc ...

sql-server怎样统计某一列相同的数值最多并求出来
凡事不能只看一步!select rtid, count(*) as num from table_name group by rtid 是获取table_name表中的rtid的不重复数据以及他们各自出现的次数 group by count一起用的话,那么就是把分组后的数据重复次数统计 然后再取一条数据,按照分组数量的倒排序!这样就可以取出来了!共同学习!

相似回答