难题:取PARTITION分组中第一个,但第一个必须是匹配度最高的那组中的

dzang 2019-03-17 01:25:12
标题略过,实例如下:

对A,B,C,D,E这5个小组中的男女同学进行匹配,
匹配条件要求身高相同,
——而难点在于,这匹配要求最少的位移成本——

即:

如果小组A中的女同学,跟C,D,E组的男同学都有可匹配的,
C组可配的2男;
D组可配的10男;
E组可配的6男;

那我们希望,A组先尽量跟D组的配对,配完D组后,再跟E组配,最后若还有剩的,才跟C组配,

伪代码如下:

SELECT 男ID
,ROW_NUMBER() OVER ( PARTITION BY ............ ORDER BY [可匹配数最多的组优先参与] )myNum
............
WHERE myNum = 1

请教高手,如何是实现?
...全文
122 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
卖水果的net 版主 2019-03-19
  • 打赏
  • 举报
回复
order by decode(col, 'D', 1, 'E', 2, 'C',3, 99)
dzang 2019-03-19
  • 打赏
  • 举报
回复
引用 3 楼 卖水果的net 的回复:
或者根本用不着 partition ,直接一个 row_number() 加 order by 子句就可以实现。
“直接一个 row_number() 加 order by”——直接能出结果是基于D/E/C的顺序出来?请教具体怎么实现呢?
吉普赛的歌 版主 2019-03-17
  • 打赏
  • 举报
回复
直接写个循环吧, 不要把自己给绕死了
  • 打赏
  • 举报
回复
就是各自排序生成 rid 然和2个结果集 rid序号做匹配
卖水果的net 版主 2019-03-17
  • 打赏
  • 举报
回复
或者根本用不着 partition ,直接一个 row_number() 加 order by 子句就可以实现。
卖水果的net 版主 2019-03-17
  • 打赏
  • 举报
回复
按 DEC, 这个顺序生成 partition 序列。

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧