例如现在有如下记录:
 id  name   make     amount
 1   鼠标   双飞燕     4
 2   鼠标   双飞燕     12
 3   鼠标   双飞燕     3
 4   键盘   联想       6
 5   键盘   联想       5
 6   显示器 惠普       3
 7   显示器 惠普       6我现在祥获得id为3,5,7的记录(也就是每种类型的最后一条记录),请问sql语句如何写?谢谢!

解决方案 »

  1.   

    SELECT * FROM [表名] WHERE id IN 
    (
      SELECT MAX(id) FROM [表名] GROUP BY name,make    
    )
      

  2.   

    create table a
    (
    id int,
    name nvarchar(10),
    make nvarchar(10),
    amount int
    )
    INSERT INTO a
    SELECT 
    1,  N'鼠标 ' , N'双飞燕' ,   4 UNION SELECT
    2,  N'鼠标 ' , N'双飞燕' ,   12 UNION SELECT
    3,  N'鼠标 ' , N'双飞燕' ,   3 UNION SELECT
    4,  N'键盘 ' , N'联想  ' ,   6 UNION SELECT
    5,  N'键盘 ' , N'联想  ' ,   5 UNION SELECT
    6,  N'显示器', N'惠普  ' ,   3 UNION SELECT
    7,  N'显示器', N'惠普  ' ,   6SELECT a.* FROM a inner join ( select max(id) as 'id',name from a group by name ) as b on a.id = b.idid          name       make       amount
    ----------- ---------- ---------- -----------
    3           鼠标         双飞燕       3
    5           键盘         联想         5
    7           显示器       惠普         6(3 row(s) affected)
      

  3.   


    --借用测试数据.
    create table a 

    id int, 
    name nvarchar(10), 
    make nvarchar(10), 
    amount int 

    INSERT INTO a 
    SELECT 
    1,  N'鼠标 ' , N'双飞燕' ,  4 UNION SELECT 
    2,  N'鼠标 ' , N'双飞燕' ,  12 UNION SELECT 
    3,  N'鼠标 ' , N'双飞燕' ,  3 UNION SELECT 
    4,  N'键盘 ' , N'联想  ' ,  6 UNION SELECT 
    5,  N'键盘 ' , N'联想  ' ,  5 UNION SELECT 
    6,  N'显示器', N'惠普  ' ,  3 UNION SELECT 
    7,  N'显示器', N'惠普  ' ,  6 
    select * from a T where not exists(select 1 from a where name = T.name and id >T.id)/*
    result
    ------------
      id    name     make   amount
      3 鼠标  双飞燕 3
      5 键盘  联想   5
      7 显示器 惠普   6*/drop table a