栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

SQL连接:选择一对多关系中的最后一条记录

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SQL连接:选择一对多关系中的最后一条记录

这是greatest-n-per-group在StackOverflow上经常出现的问题的一个示例。

这通常是我建议解决的方式:

SELECt c.*, p1.*FROM customer cJOIN purchase p1 ON (c.id = p1.customer_id)LEFT OUTER JOIN purchase p2 ON (c.id = p2.customer_id AND     (p1.date < p2.date OR (p1.date = p2.date AND p1.id < p2.id)))WHERe p2.id IS NULL;

说明:给定一行

p1
,就不应有
p2
同一位客户和更晚的日期(或者在有联系的情况下,更晚的日期id)。当我们发现这是事实时,则
p1
是该客户的最近一次购买。

对于指数,我会在创建复合指数

purchase
在列(
customer_id,date,id
)。这可以允许使用覆盖索引来完成外部联接。确保优化在您的平台上进行测试,因为优化取决于实现。使用RDBMS的功能来分析优化计划。例如EXPLAIN在MySQL上。

有些人使用子查询来代替我上面显示的解决方案,但是我发现我的解决方案可以更轻松地解决联系。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/614548.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号