排序列表,保留分组字符
sorting a list, preserving the grouped character
我有一个列表 "messages"
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-query:
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
我有一个列表 "messages"
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-query:
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