sql - 选择 SQL Server 中每个唯一组合的最后一行
问题描述
无论组合元素顺序如何,我都需要选择每个唯一组合的最后一行。例如组合(5,6)
和(6,5)
将被视为相同的组合。
我的预期输出:
到目前为止我做了什么:
Select * From
(
Select *, ROW_NUMBER() over (Partition by SenderId, ReceiverId order by MessageId desc) as Seq From Messages
) as TempTalbe Where Seq = 1
我的查询的输出是:
SQL Server 专家有什么帮助吗?
解决方案
你可以用row_number()
这个。传统的方法是:
select m.*
from (select m.*,
row_number() over (partition by (case when senderId < receiverId then senderId else receiverId end),
(case when senderId < receiverId then receiverId else senderId end)
order by messageSentAt desc
) as seqnum
from messages m
) m
where seqnum = 1;
您也可以在没有子查询的情况下对其进行表述:
select top (1) with ties m.*
from messages m
order by row_number() over (partition by (case when senderId < receiverId then senderId else receiverId end),
(case when senderId < receiverId then receiverId else senderId end)
order by messageSentAt desc
);
推荐阅读
- node.js - 为什么这个节点 setInterval 运行缓慢?
- angular - 如何将json映射到Angular中的接口对象
- python - 从相机到物体计算的opencv距离减少了4“
- python - 我有一个 400 万行的 DataFrame 并尝试将一列值从字符串转换为 JSON 并遇到内存问题。如何改进我的代码?
- flutter - setState() 不会更新 TabBarView 选项卡中的构造函数值
- javascript - CSS/JS 冲突按优先顺序排列
- apache-spark - 从多租户 Kafka 主题处理 Apache Beam 中的乱序事件窗口
- html - 父 div 比孩子大一个小的白色边框,我不知道为什么
- ios - 函数 swift 后值变为空
- android - Kotlin-Android First App Unresolved Reference TextView with Button