我有一个包含两个字段的表格,名称和日期,让我们说:
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
;那么名字按字母顺序排列,我不想要那个。
答案 0 :(得分:0)
自己加入表格,按名称分组并获取每个名称的最新日期。然后您可以按最新日期排序,然后按名称排序(将最新日期恰好相同的名称放在一起),然后按日期排序。
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
答案 1 :(得分:0)
我认为这就是你想要的(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
,所以最先出现的日期是未定义的,而且没有额外的排序。