按照两列进行排序和排序。
按照两列进行排序和排序。
我有一个查询返回的结果集如下:
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中实现这个?
对于一个项目,你想按照最早的发布日期进行排序,然后再按照项目内的发布日期进行排序。
你可以使用窗口函数来获取最早的日期,并将其用于排序:
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
以上代码首先使用子查询来计算每个项目的最早发布日期,并将结果作为新的列`minrdt`,然后再按照`minrdt`、`proj`和`releaseDt`三列进行排序。
这样做的原因是,通过使用窗口函数,我们可以在每个项目内获取最早的发布日期,并将其与其他项目进行比较。然后,我们可以按照最早日期、项目和发布日期的顺序对结果进行排序。
通过这种方法,我们可以实现按照两个列进行排序的需求。
排序和按两列排序的原因是为了按照项目(Proj)和发布日期(releaseDt)对表进行排序。解决方法是使用SQL查询语句SELECT * FROM mytable ORDER BY Proj ASC, releaseDt DESC
。这样可以按照Proj升序和releaseDt降序的顺序对表进行排序。
然而,根据问题描述,用户不希望按照Proj排序,而是仅按照最新的发布日期(releaseDt)排序,并保持同一个项目(Proj)的所有行在一起。
为了解决这个问题,可以修改SQL查询语句如下:SELECT * FROM mytable ORDER BY releaseDt DESC, Proj ASC
。这样可以先按照最新的发布日期(releaseDt)降序排序,然后再按照Proj升序排序。这样就能够按照最新的发布日期排序,同时保持同一个项目的所有行在一起。
总结起来,解决这个问题的方法是使用SQL查询语句SELECT * FROM mytable ORDER BY releaseDt DESC, Proj ASC
,这样可以按照最新的发布日期排序,并保持同一个项目的所有行在一起。