订购有序组

时间:2012-11-21 13:02:56

标签: sql sql-server group-by

我有一个类似于以下的表结构:

ID  |DateUploaded|FamilyCode|
1   |01/01/2010  |FC0001    |
2   |01/01/2011  |FC0001    |
3   |01/01/2012  |FC0001    |
4   |01/08/2012  |FC0002    |
5   |01/01/2012  |FC0002    |
6   |01/08/2012  |FC0002    |
7   |01/01/2012  |FC0002    |
8   |01/08/2012  |FC0003    |
9   |01/07/2012  |FC0003    |   

我有一个具有以下ORDER BY的选择:

 ORDER BY FamilyCode, DateUploaded desc

这会对结果进行排序,以便将它们有效地分组到族中,并通过DateReceived对族的元素进行排序。现在需要的是家庭按顺序显示,所以最近的DateReceived家庭在最顶层。

有谁知道我怎么做到这一点?

感谢任何建议添加desc的人,我实际上已经得到了这个,但它不希望我追求。

在上表中,我希望将所有结果返回为:

ID  |DateUploaded|FamilyCode|
4   |01/08/2012  |FC0002    |
6   |01/07/2012  |FC0002    |
5   |01/01/2012  |FC0002    |
7   |01/01/2012  |FC0002    |
8   |01/08/2012  |FC0003    |
9   |01/07/2012  |FC0003    |
3   |01/01/2012  |FC0001    |
2   |01/01/2011  |FC0001    | 
1   |01/01/2010  |FC0001    |

因此,结果将分组为系列,其中最新日期上载的系列位于顶部,而组内的结果按日期排序。

3 个答案:

答案 0 :(得分:2)

我怀疑你希望所有家庭在一起,根据最近的日期。为此,您需要添加为每个系列上传的最大日期。这是一种方法:

select FamilyCode, DateUploaded, . . .
from (select t.*,
             max(DateUploaded) over (parition by FamilyCode) as maxDateUploaded
      from t
     ) t
order by maxDateUploaded, FamilyCode

请注意,订单仍包含FamilyCode。这很重要,因为多个家庭可能共享相同的最大日期,您仍然希望将这些家庭组合在一起。

答案 1 :(得分:0)

ORDER BY FamilyCode, DateUploaded DESC

答案 2 :(得分:0)

使用desc命令

order by dateuploaded desc,familycode