我有一个“消息”列表
recei | sender |date(timestamp)| id
--------+--------+---------------+----
Nickel | Lisett | 3.10.1991 | 1
Tom | Nickel | 4.12.1991 | 2
Lisett | Nickel | 03.9.1991 | 3
Nickel | Lisett | 01.9.1991 | 4
Tom | Nickel | 15.9.1991 | 5
Nickel | Tom | 2.10.1991 | 6
当我执行此 sql 查询时:
SELECT *, IF(recei='Nickel', sender, recei ) AS name
FROM messages WHERE recei='Nickel' OR sender='Nickel'
ORDER BY name, date;
我得到以下结果
name | recei | sender | date |id
(=interlocutor of Nickel)| | | |
--------------------------+--------+--------+---------+----
Lisett | Nickel | Lisett |3.10.1991| 1
Lisett | Lisett | Nickel |03.9.1991| 3
Lisett | Nickel | Lisett |01.9.1991| 4
Tom | Tom | Nickel |4.12.1991| 2
Tom | Tom | Nickel |15.9.1991| 5
Tom | Nickel | Tom |2.10.1991| 6
但我想让 Nickel 的最后一位对话者排在首位:所以我想在最早的日期之前订购组“Lisett”(名称为 (Interlocutor) Lisett 的行)和“Tom” .在这种特殊情况下,将“Tom”组放在“Lisett”组之上。所以说在组内寻找最早的日期,并将日期较早的组放在另一个组之上。这可能吗?
最佳答案
您可以使用内部联接来获取 date_max 并使用此列进行排序
SELECT a.* , IF(a.recei='Nickel', a.sender, a.recei ) AS name
FROM messages as a
INNER JOIN ( SELECT IF(recei='Nickel', sender, recei ) as name, max(date) date_max
FROM messages WHERE recei='Nickel' OR sender='Nickel'
group by name ) t on t.name = IF(a.recei='Nickel', a.sender, a.recei )
WHERE a.recei='Nickel' OR a.sender='Nickel'
ORDER BY t.date_max, name, a.date
关于mysql - 排序列表,保留分组字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40896063/