sql - 如何使用其他字段作为排序顺序进行排序?
Posted
技术标签:
【中文标题】sql - 如何使用其他字段作为排序顺序进行排序?【英文标题】:sql - How to order by using other field as sort order? 【发布时间】:2015-03-16 23:19:31 【问题描述】:我有一个包含两个字段的表格,名称和日期,比如说:
name | date
A 1/12/15
D 1/11/15
C 1/11/15
A 1/10/15
C 1/09/15
B 1/09/15
A 1/08/15
我想按名称对其进行排序,以便所有相同名称的名称一起出现,但按日期排序,这样第一个名称将是日期较近的名称。
所以我会得到:
name | date
A 1/12/15
A 1/10/15
A 1/08/15
D 1/11/15
C 1/11/15
C 1/09/15
B 1/09/15
因为如果我使用orderby name, date desc
;然后名称按字母顺序排列,我不希望这样。
【问题讨论】:
【参考方案1】:将表格与自身连接,您可以在其中按名称分组并获取每个名称的最新日期。然后您可以按最新日期排序,然后按名称(将相同的名称放在一起,其中最新日期恰好相同),然后按日期。
select
t.name,
t.date
from
TheTable as t
inner join (
select
name,
max(date) as date
from
TheTable
group by
name
) as x on x.name = t.name
order by
x.date desc,
t.name,
t.date desc
【讨论】:
【参考方案2】:我认为这就是你想要的 (see SQL Fiddle demo here):
SELECT n1.name, n1.dt
FROM nd n1 INNER JOIN (
SELECT name, MAX(dt) AS max_dt
FROM nd
GROUP BY name
) n2
ON n1.name = n2.name
ORDER BY n2.max_dt DESC, n1.dt DESC
请记住,因为C
和D
的最近日期都是1/11/2015
,所以先出现的日期是未定义的,没有额外的排序。
【讨论】:
以上是关于sql - 如何使用其他字段作为排序顺序进行排序?的主要内容,如果未能解决你的问题,请参考以下文章
按查询的where子句中的字段顺序对sql查询的结果进行排序