选择日期值最高的对(包括倒序)

Posted

技术标签:

【中文标题】选择日期值最高的对(包括倒序)【英文标题】:Selecting pair(including reverse order) with highest date value 【发布时间】:2021-02-16 05:37:27 【问题描述】:

我有一个这样的消息表 Messages Table

我想选择日期最高的每个唯一对(包括倒序)。因此生成的 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 与 max 函数一起使用,但没有帮助。

【问题讨论】:

【参考方案1】:

你可以使用窗口函数:

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()greatest()

【讨论】:

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

以上是关于选择日期值最高的对(包括倒序)的主要内容,如果未能解决你的问题,请参考以下文章

选择日期+3天,不包括周末和节假日

layui中怎么在查询中获取日期选择器的值然后重载表格并加载选择的日期到表头

最新/最高日期限制表

根据下拉值设置 2 个日期选择器的最小日期和最大日期

选择最小日期值并计算日期值?

当使用 Bootstrap Datepicker 选择两个日期时,显示总天数(不包括周六和周日)