如何统计成对出现的数据

name506 2017-08-15 12:05:29
现有一张旅客住宿登记的表格hotel,内容如下,我们要从中对人员轨迹进行分析,从中找出同行人员:
姓名  入住日期  宾馆名称
甲   9月1日   A宾馆
乙   9月1日   A宾馆
丙   9月1日   A宾馆
丁   9月1日   A宾馆
戊   9月1日   A宾馆
己   9月1日   C宾馆
庚   9月1日   D宾馆
甲   9月2日   B宾馆
乙   9月2日   B宾馆
丙   9月2日   B宾馆
己   9月2日   B宾馆
庚   9月2日   B宾馆
丁   9月3日   C宾馆
戊   9月3日   C宾馆
从上面的表格可以看出,甲,乙,丙三人在9月1日同日入住A宾馆,又在9月2日同日入住B宾馆;丁,戊二人在9月1日同日入住A宾馆,又在9月3日同日入住C宾馆。综合分析,甲,乙,丙可能是同行人员,而丁和戊也可能是同行人员



现在要问的问题是,如果要统计甲是否有同行人员,统计得出得出如下结果
甲,乙,丙   9月1日   A宾馆
甲,乙,丙   9月2日   B宾馆


或这样的结果

甲   9月1日   A宾馆
乙   9月1日   A宾馆
丙   9月1日   A宾馆

甲   9月2日   B宾馆
乙   9月2日   B宾馆
丙   9月2日   B宾馆

如果统计庚,则显示无同行人员

这个统计成对出现的数据应该是很常用的统计,大家遇到这种问题一般是怎样实现的,是用语句实现的,还是写程序实现的?

非常感谢
...全文
226 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ckc 2017-08-17
  • 打赏
  • 举报
回复
引用 3 楼 jdsnhan 的回复:
[quote=引用 1 楼 ckc 的回复:] 我一向主张复杂逻辑尽可能用外部程序实现,比动脑筋写很复杂的sql难度低,不容易出错, 将来维护、调整也容易 甚至我都不主张pl/sql,因为实际生产中pl/sql功能受限制,代码繁琐,容易出错,不方便版本控制
恰恰相反,我一般都建议,把复杂的业务机构以简单的视图形式提供给开发人员,让开发人员针对结果清晰的视图做业务逻辑判断。 [/quote] 如果是基础数据,你的方法比较可行。然而楼主问的并不是基础数据,这是日常工作中遇到的变化较多较快不确定的复杂查询。 这种很难提前准备好视图什么的给大家用,这些查询也未必能在以前继续发挥作用。 业务情况变化了你的视图接口不能适应新的情况怎么办?变化接口相当于基础平台发生的变化,会对现有的 应用造成大的影响。不变化接口那就只能增加新的接口,会把系统搞的很复杂。 单一视图里能做的东西不太可能适应很多复杂查询场景。 我们以前有个系统,开发商就是喜欢写存储过程解决问题,那个项目后来管理极其混乱, 因为不方便做版本控制,几个维护人员手头的版本都不一样,经常一个bug反复出现反复修改。 真是折腾死了。 或许,你的经验来自于你自己的工作经历,我想说,你的这种情况未必是可以复制的。
卖水果的net 2017-08-15
  • 打赏
  • 举报
回复
第一种结果,楼主百度一下listagg 这个函数,可以满足你的需求。
ckc 2017-08-15
  • 打赏
  • 举报
回复
我一向主张复杂逻辑尽可能用外部程序实现,比动脑筋写很复杂的sql难度低,不容易出错, 将来维护、调整也容易 甚至我都不主张pl/sql,因为实际生产中pl/sql功能受限制,代码繁琐,容易出错,不方便版本控制
name506 2017-08-15
  • 打赏
  • 举报
回复
感谢各位,判断同行两次的还可以用exists来执行,虽然效率低一点,但是要统计同行3次或4次以上的记录时,就完全没招了,请大家指教,谢谢
jdsnhan 2017-08-15
  • 打赏
  • 举报
回复
引用 1 楼 ckc 的回复:
我一向主张复杂逻辑尽可能用外部程序实现,比动脑筋写很复杂的sql难度低,不容易出错, 将来维护、调整也容易 甚至我都不主张pl/sql,因为实际生产中pl/sql功能受限制,代码繁琐,容易出错,不方便版本控制
恰恰相反,我一般都建议,把复杂的业务机构以简单的视图形式提供给开发人员,让开发人员针对结果清晰的视图做业务逻辑判断。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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