按两列排序和排序

时间:2013-06-13 15:33:18

标签: sql sql-server tsql sql-order-by

我有一个返回结果集的查询:

Proj  |  release  |  releaseDt
1     |   2       |  1/2/2013
1     |   1       |  4/5/2012
2     |   1       |  [null]
3     |   1       |  22/2/2013
1     |   3       |  [null]
3     |   2       |  [null]

我需要按releaseDt对此进行排序,但我需要将Proj的所有记录放在一起。

排序后,结果应该是这样的:

Proj | release |   releaseDt
1    |  2      |   1/2/2013
1    |  1      |   4/5/2012
1    |  3      |   [null]
3    |  1      |   22/2/2013
3    |  2      |   [null]
2    |  1      |   [null]

如何使用SQL Server执行此操作?

3 个答案:

答案 0 :(得分:3)

您需要做的就是对表格进行两次排序:首先是Proj,然后是releaseDt

SELECT *
FROM mytable
ORDER BY
  Proj ASC,
  releaseDt DESC

答案 1 :(得分:3)

尝试

ORDER BY proj ASC, releaseDt DESC

应该做的伎俩!

答案 2 :(得分:1)

您希望按项目的最早发布日期排序,然后按项目中的发布日期排序。

您可以使用窗口函数获取最早的日期,然后使用它进行排序:

select t.Proj, t.release, t.releaseDt
from (select t.*, min(releasedt) over (partition by proj) as minrdt
      from t
     ) t
order by t.minrdt, t.proj, t.releaseDt