日期:2014-05-18  浏览次数:20433 次

SQLSERVER 的部分排序问题, 困扰很久, 不想用临时表解决
一个表有如下记录:

  No MyName MyTime 
-----------------------------
  1 李四 2011-06-23
  2 李四 2011-06-24
  3 王五 2011-06-24
  4 张三 2011-06-23  
  5 张三 2011-06-24 

标准排序方式为: ORDER BY MyName, MyTime, 因为李(L), 王(W), 张(Z), 所以排序是李、王、张
但是公司要求排序在此基础上还得检查相同名称的取最小时间再排序, 也就是说希望得到的结果如下:

  No MyName MyTime 
-----------------------------
  1 李四 2011-06-23
  2 李四 2011-06-24
  3 张三 2011-06-23 <--- 因为张三的最小时间比王五的最小时间小, 所以得排王五前边  
  4 张三 2011-06-24 
  5 王五 2011-06-24

我原先的语句是: SELECT * FROM MyTable ORDER BY MyName, MyTime,不符合要求

这个排序语句我该怎么写?



------解决方案--------------------
order by myname,min(mytine)
------解决方案--------------------
SQL code
create table tb(name varchar(4), rq datetime)
go
insert into tb select '张三' ,'2011-06-22' --- 因为张三的最小时间比李四的最小时间小, 所以得排李四前边   
insert into tb select   '张三', '2011-06-24'  
insert into tb select   '李四' ,'2011-06-23'
insert into tb select  '李四' ,'2011-06-24'
insert into tb select '王五', '2011-06-24'

go

select a.name, a.rq from
tb a, (select name, min(rq) as rq from tb group by name) b
where a.name = b.name
order by b.rq, a.name