Sql 选择日期值最高的对(包括反向顺序)
我有一个这样的消息表 我想选择每个具有最高日期的唯一对(包括反向顺序)。因此,生成的SQL Select语句如下所示: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函数,但没有任何帮助。您可以使用窗口函数:
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
最终属于同一组。然后,我们只取每组的最新记录。