sql - 如何使用其他字段作为排序顺序进行排序?

时间:2015-01-19 00:23:06

标签: sql sqlite sorting sql-order-by

我有一个包含两个字段的表格,名称和日期,让我们说:

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;那么名字按字母顺序排列,我不想要那个。

2 个答案:

答案 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

请注意,因为CD的最新日期为1/11/2015,所以最先出现的日期是未定义的,而且没有额外的排序。