我的数据如下所示:
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;
但是,结果如下。即使引用 ID 为空,我也会按注册日期排序。总之,要配置为第二个表,数据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
最佳答案
你就快到了,使用left join
来获取所有记录,尝试以下操作:
SELECT t.*
FROM t
LEFT JOIN (
SELECT `Ref Id`, MAX(`Reg Date`) AS maxdate
FROM t
WHERE `App Type` = 'Main'
GROUP BY 1
) md USING(`Ref Id`)
ORDER BY t.`Ref Id` is not null, maxdate DESC, (`App Type` = 'Main') DESC, t.`Reg Date` DESC;
关于mysql - 如何控制MySQL排序中的nulls-first或nulls-last?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44304066/