SQL如何按两列分组

Vla*_*tev 3 mysql sql

波纹管是一个示例表。

ID   FROM       TO         DATE  
1    Number1    Number2    somedate
2    Number2    Number1    somedate
3    Number2    Number1    somedate
4    Number3    Number1    somedate
5    Number3    Number2    somedate
Run Code Online (Sandbox Code Playgroud)

预期结果是为每对唯一的 TO 和 FROM 列获得 1 行

如果按 ID ASC 排序,则示例结果

(1,Number1,Number2)
(4,Number3,Number1)
(5,Number3,Number2)
Run Code Online (Sandbox Code Playgroud)

好的,我找到了如何使用以下查询执行此操作

SELECT * FROM table GROUP BY LEAST(to,from), GREATEST(to,from)
Run Code Online (Sandbox Code Playgroud)

但是,我无法获得每个唯一对的最新记录。

我试过,order by ID desc但它返回唯一对的第一个找到的行。

小智 5

SQL fiddle 由于某种原因无法正常工作,因此同时您需要帮助我来帮助您。

假设以下语句有效

SELECT 
    LEAST(to,from) as LowVal, 
    GREATEST(to,from) as HighVal, 
    MAX(date) as MaxDate
FROM table 
GROUP BY LEAST(to,from), GREATEST(to,from)
Run Code Online (Sandbox Code Playgroud)

那么你可以加入

select t.*
from 
    table t
    inner join 
        (SELECT 
            LEAST(to,from) as LowVal, 
            GREATEST(to,from) as HighVal, 
            MAX(date) as MaxDate
        FROM table 
        GROUP BY LEAST(to,from), GREATEST(to,from)
        ) v
        on t.date = v.MaxDate
        and (t.From = v.LowVal or t.From = v.HighVal)
        and (t.To = v.LowVal or t.To= v.HighVal)
Run Code Online (Sandbox Code Playgroud)