【问题标题】:Sorting and ordering by two columns按两列排序和排序
【发布时间】:2013-06-13 15:33:18
【问题描述】:

我有一个查询,它返回如下结果集:

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 做到这一点?

【问题讨论】:

  • 您需要在该列上使用order by
  • no .. 在发布 dt 上添加 order by 将根据 dt 对整个结果集进行排序 .. 我希望该项目的相应行聚集在一起。
  • 你试过我的答案了吗?它应该完全符合您的要求。

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


【解决方案1】:

您只需对表格进行两次排序:首先按Proj,然后按releaseDt

SELECT *
FROM mytable
ORDER BY
  Proj ASC,
  releaseDt DESC

【讨论】:

  • 我不想为项目订购 orderby ......因为它完全取决于哪个发布日期是最新的 ..
  • @user1916649 对不起,我不明白你的意思 - 你能改写你的问题吗?
  • 我的需要是使用最新 releaseDt 对结果集进行排序,同时将项目的所有行保持在一起。
【解决方案2】:

试试

ORDER BY proj ASC, releaseDt DESC

应该做的伎俩!

【讨论】:

    【解决方案3】:

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

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-30
      • 2020-07-25
      • 2012-10-19
      • 1970-01-01
      • 2015-12-27
      • 2021-08-14
      • 2014-03-10
      • 2021-02-27
      相关资源
      最近更新 更多