Sql 选择日期值最高的对(包括反向顺序)

Sql 选择日期值最高的对(包括反向顺序),sql,sqlite,datetime,greatest-n-per-group,Sql,Sqlite,Datetime,Greatest N Per Group,我有一个这样的消息表 我想选择每个具有最高日期的唯一对(包括反向顺序)。因此,生成的SQL Select语句如下所示: from_id | to_id | date | message 1 2 13:06 I'm Alp 2 3 13:06 I'm Oliver 3 1 11:38 From third to one 我尝试使用distinct with max函数,但没有任何帮助。您可以使用窗口函数:

我有一个这样的消息表

我想选择每个具有最高日期的唯一对(包括反向顺序)。因此,生成的SQL Select语句如下所示:

from_id | to_id | date | message
1          2      13:06  I'm Alp
2          3      13:06  I'm Oliver
3          1      11:38  From third to one

我尝试使用distinct with max函数,但没有任何帮助。

您可以使用窗口函数:

select *
from (
    select m.*, 
        row_number() over(partition by min(from_id, to_id), max(from_id, to_id) order by date desc) rn
    from messages m
) m
where rn = 1

注意:与直觉相反,SQLite的
min()
max()
函数在给定多个参数时,相当于其他数据库中的
least()
grest()

非常感谢,这确实有效!您能稍微解释一下您的代码吗?@alpino:诀窍是通过成对的
from/to
来构建记录组。所以我们取这两列中的最小值和最大值来构建组。基本上,
1/2
2/1
最终属于同一组。然后,我们只取每组的最新记录。