【发布时间】:2017-11-02 09:32:24
【问题描述】:
我的数据如下所示:
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
7 null Main 2017-05-20
我想按如下所示更改此表。
App ID Ref Id App Type Reg Date
7 null Main 2017-05-20
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 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 为空,我也会按 Reg Date 排序。总之,要配置为第二张表,数据7应该在最上面。
App ID Ref Id App Type Reg Date maxdate
4 2 Main 2017-05-15 2017-05-15
2 2 Sub 2017-05-14 2017-05-15
5 3 Main 2017-05-14 2017-05-14
1 1 Main 2017-05-13 2017-05-13
6 1 sub 2017-05-17 2017-05-13
3 1 Sub 2017-05-16 2017-05-13
7 null Main 2017-05-20 null
【问题讨论】:
-
请使用引号使您的信息可读。另外,如果你能以表格形式发布结果,那就更好了。
-
问题是由于空
Ref Id导致子查询的连接失败。也许你可以用ORDER BY COALESCE(maxdate,'Reg Date')代替ORDER BY maxdate。 -
最后一条评论应该在
Reg Date周围加上反引号而不是单引号,但我不知道如何防止对格式做奇怪的事情。 -
@SteveLovell 我已经通过添加该部分解决了这个问题。ORDER BY COALESCE(maxdate,'Reg Date') 谢谢。
标签: mysql sql group-by sql-order-by