【问题标题】:sql - How to order by using other field as sort order?sql - 如何使用其他字段作为排序顺序进行排序?
【发布时间】: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;然后名称按字母顺序排列,我不希望这样。

【问题讨论】:

    标签: sql sqlite sorting sql-order-by


    【解决方案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
      

      请记住,因为CD 的最近日期都是1/11/2015,所以先出现的日期是未定义的,没有额外的排序。

      【讨论】:

        猜你喜欢
        • 2017-10-06
        • 2011-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-28
        相关资源
        最近更新 更多