【发布时间】:2012-08-10 21:34:09
【问题描述】:
我有一个客户向我提出的奇怪问题。
他有一个数据列表,括号之间的日期如下:
Foo (14/08/2012)
Bar (15/08/2012)
Bar (16/09/2012)
Xyz (20/10/2012)
但是,他希望列表显示如下:
Foo (14/08/2012)
Bar (16/09/2012)
Bar (15/08/2012)
Foot (20/10/2012)
(请注意,第二个 Bar 已上移一位)
因此,其背后的逻辑是,列表必须按日期升序排序,除非两行具有相同的名称('Bar')。如果它们具有相同的名称,则必须以 LATEST 日期在顶部进行排序,同时保持其他排序顺序。
这甚至是遥不可及的吗?我已经尝试了很多ORDER BY 子句,但找不到合适的子句。有人有想法吗?
我应该指定此数据来自 sql server 数据库中的表(名称和日期位于两个不同的列中)。所以我正在寻找可以进行我想要的排序的 SQL 查询。
(我已经把这个例子简化了很多,所以如果你需要更多的上下文,请不要犹豫)
【问题讨论】:
-
如果
Bars 之一的日期是 2012 年 8 月 13 日而不是 15 日(所以Foo行应该在它们之间,没有其他规则) - 那么会发生什么? -
更新了我的问题。我正在使用 SQL 服务器。
-
它们只有在相邻时才需要按指定顺序排列。因此,如果它们之间还有另一条记录,那没关系,它们应该按日期升序排序。只有当两个同名记录相邻时,才应该降序排列。
标签: sql sql-server sorting