【问题标题】:I want to construct a query using the orderby clause. Please advise我想使用 orderby 子句构造一个查询。请指教
【发布时间】:2017-05-31 14:42:01
【问题描述】:

我的数据如下所示:

App ID  Ref Id  App Type  Reg Date
1       1       Main      2017-05-13
2       2       Sub       2017-05-14
3       1       Sub       2017-05-16
4       2       Main      2017-05-15
5       3       Main      2017-05-14
6       1       sub       2017-05-17

我想按如下所示更改此表。

App ID  Ref Id  App Type Reg Date
4       2       Main     2017-05-15
2       2       Sub      2017-05-14
5       3       Main     2017-05-14
1       1       Main     2017-05-13
6       1       sub      2017-05-17
3       1       Sub      2017-05-16

显示具有相同 ref ID 的内容,具有 Main 的内容位于顶部。 最近注册的内容必须在顶部。 也就是说,我想创建一个层次结构。

Select * 
from table 
order by refId desc, App Type asc, Reg Date desc

我应该像上面那样配置查询吗?

【问题讨论】:

  • “顺序”不清楚:没有一列既不是升序也不是降序。
  • Select * from table order by refId desc, Ref_ID, App Type asc, Reg Date desc
  • @uSeruSher 你是说Ref_ID和App Type都是按asc排序的?
  • @YoungHoLee 来自您的输出示例,看起来您希望在“Main”之后为相同的 refid 使用“Sub”,在这种情况下,您也必须将 refid 添加到排序列表中

标签: mysql sql sql-order-by hierarchy


【解决方案1】:

测试过:

SELECT * 
FROM t 
JOIN (SELECT `Ref Id`, MAX(`Reg Date`) AS maxdate FROM t WHERE `App Type` = 'Main' GROUP BY 1) md USING(`Ref Id`) 
ORDER BY maxdate DESC, `Ref Id`, (`App Type` = 'Main') DESC;

+--------+--------+----------+------------+------------+
| Ref Id | App ID | App Type | Reg Date   | maxdate    |
+--------+--------+----------+------------+------------+
|      2 |      4 | Main     | 2017-05-15 | 2017-05-15 |
|      2 |      2 | Sub      | 2017-05-14 | 2017-05-15 |
|      3 |      5 | Main     | 2017-05-14 | 2017-05-14 |
|      1 |      1 | Main     | 2017-05-13 | 2017-05-13 |
|      1 |      6 | sub      | 2017-05-17 | 2017-05-13 |
|      1 |      3 | Sub      | 2017-05-16 | 2017-05-13 |
+--------+--------+----------+------------+------------+

【讨论】:

    【解决方案2】:

    我想你想要:

    select t.*
    from t
    order by (select max(t2.regdate) from t t2 where t2.refid = t.refid) desc,
             t.refid,
             (t.apptype = 'Main') desc,
             t.regdate desc;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-31
      • 2011-09-05
      • 2021-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多