查询的列表,判断用户是否存在和所属单位

JavaAlpha 2016-09-01 05:19:57
问题描述:
查询一张大表(20W)条数据,每次查询10到100条,
1. 根据查询结果判断每条数据的用户是否是新客户(判断依据是手机号是否存在现有表中)
2. 判断客户所属单位(判断依据是订单编号开头2位标识)TB000001(淘宝),GW000001(官网),SC000001(商城)
所有数据都是在一张表中。


个人的笨思路:
查询的列表到前台后,再根据显示的字段进行Ajax查询进行对比判断。
但是这样的效率太低了,因为每条记录的新客户标识和所属单位标识,都要进行查询2次。
...全文
583 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghx287524027 2016-09-02
  • 打赏
  • 举报
回复
描述的详细一些~
JavaAlpha 2016-09-02
  • 打赏
  • 举报
回复


非常感谢,就是这样的效果。
不写代码的钦 2016-09-02
  • 打赏
  • 举报
回复
引用 9 楼 JavaAlpha 的回复:
[quote=引用 7 楼 sevenlover 的回复:] [quote=引用 6 楼 JavaAlpha 的回复:] 如图: 1.是查询出来的所有订单,本月是否新客户这里根据手机号判断之前是否出现过,要显示(是或者否) 2.客户归属这里,需要根据用户的第一次下单的订单编号的前2位判断归属哪里,要显示(DH电话,GW官网,TB淘宝)
1.如果一个客户某月下了两个以上的订单,那么"本月是否新客户"列怎么显示?按下单时间第1条显示是"是",之后的显示是"否"?还是都显示是"是" 2.关于客户归属,如果某客户第一次订单编号是GW-----,第N次的订单编号是TB----,那么第一次和第N次的客户归分别显示是什么?都是显示GW?[/quote] 感谢回复 1.下了2单以上,只要本月之前没有下单就是本月新用户,都是显示“是” 2.只要第一次下单是GW开头,那用户就是显示官网,以后其他的订单编号开头忽略[/quote] 好吧,你是要这样子,看可以吗? with tmp1 as ( select 110 手机号,'TB000001' 订单号,'20160902' 下单日期 from dual union all select 110 手机号,'SC000001' 订单号,'20160901' 下单日期 from dual union all select 110 手机号,'GW000001' 订单号,'20160831' 下单日期 from dual union all select 120 手机号,'SC000001' 订单号,'20160901' 下单日期 from dual ) select tmp1.手机号,tmp1.订单号,tmp1.下单日期,decode(tmp2.所属单位,'GW','官网','SC','商城','TB','淘宝') 所属单位, (case when substr(tmp1.下单日期,1,6)=substr(tmp2.下单日期,1,6) then '是' else '否' end) 是否新用户 from tmp1, (select 手机号,下单日期,所属单位 from (select 手机号,下单日期,substr(订单号,1,2) 所属单位,row_number() over (partition by 手机号 order by 下单日期) rn from tmp1 order by 下单日期) where rn=1) tmp2 where tmp1.手机号=tmp2.手机号 ; 手机号 订单号 下单日期 所属单位 是否新用户 110 TB000001 20160902 官网 否 110 SC000001 20160901 官网 否 110 GW000001 20160831 官网 是 120 SC000001 20160901 商城 是 PS:这样子结果就是每条订单对应时间点的"所属单位"和"是否新用户"结果,如果只需一条,自己做一个筛选
JavaAlpha 2016-09-02
  • 打赏
  • 举报
回复
引用 7 楼 sevenlover 的回复:
[quote=引用 6 楼 JavaAlpha 的回复:] 如图: 1.是查询出来的所有订单,本月是否新客户这里根据手机号判断之前是否出现过,要显示(是或者否) 2.客户归属这里,需要根据用户的第一次下单的订单编号的前2位判断归属哪里,要显示(DH电话,GW官网,TB淘宝)
1.如果一个客户某月下了两个以上的订单,那么"本月是否新客户"列怎么显示?按下单时间第1条显示是"是",之后的显示是"否"?还是都显示是"是" 2.关于客户归属,如果某客户第一次订单编号是GW-----,第N次的订单编号是TB----,那么第一次和第N次的客户归分别显示是什么?都是显示GW?[/quote] 感谢回复 1.下了2单以上,只要本月之前没有下单就是本月新用户,都是显示“是” 2.只要第一次下单是GW开头,那用户就是显示官网,以后其他的订单编号开头忽略
不写代码的钦 2016-09-02
  • 打赏
  • 举报
回复
--模拟场景 假设数据这样子: 手机号 订单号 下单日期 110 TB000001 20160902 110 GW000001 20160901 110 SC000001 20160831 120 SC000001 20160901 你想要的结果: 手机号 订单号 下单日期 是否新用户 客户所属单位 110 TB000001 20160902 不是新用户 淘宝 110 GW000001 20160901 不是新用户 官网 110 SC000001 20160831 是新用户 商城 120 SC000001 20160901 是新用户 商城 code: select 手机号 ,订单号 ,下单日期 ,(case when back is null then '是新用户' else '不是新用户' end) 是否新用户, decode(substr(订单号,1,2),'TB','淘宝','GW','官网','SC','商城') 客户所属单位 from ( select p.手机号,p.订单号,p.下单日期,lead(p.下单日期) over(partition by p.手机号 order by 下单日期 desc) back from 你要查询的表 p );
sevenlover 2016-09-02
  • 打赏
  • 举报
回复
引用 6 楼 JavaAlpha 的回复:
如图: 1.是查询出来的所有订单,本月是否新客户这里根据手机号判断之前是否出现过,要显示(是或者否) 2.客户归属这里,需要根据用户的第一次下单的订单编号的前2位判断归属哪里,要显示(DH电话,GW官网,TB淘宝)
1.如果一个客户某月下了两个以上的订单,那么"本月是否新客户"列怎么显示?按下单时间第1条显示是"是",之后的显示是"否"?还是都显示是"是" 2.关于客户归属,如果某客户第一次订单编号是GW-----,第N次的订单编号是TB----,那么第一次和第N次的客户归分别显示是什么?都是显示GW?
JavaAlpha 2016-09-02
  • 打赏
  • 举报
回复


如图:
1.是查询出来的所有订单,本月是否新客户这里根据手机号判断之前是否出现过,要显示(是或者否)
2.客户归属这里,需要根据用户的第一次下单的订单编号的前2位判断归属哪里,要显示(DH电话,GW官网,TB淘宝)
JavaAlpha 2016-09-02
  • 打赏
  • 举报
回复
引用 4 楼 ghx287524027 的回复:
描述的详细一些~
场景: 对一张表进行查询,判断每一条记录是否有重复的,没有重复的则是新用户; 根据订单长字段的前2位标识判断此订单属于哪里。
hdg5211314 2016-09-01
  • 打赏
  • 举报
回复
引用 2 楼 JavaAlpha 的回复:
[quote=引用 1 楼 wmxcn2000 的回复:] 查询一张大表(20W)条数据,每次查询10到100条, 直接 select * from t where col = 手机号 不可以吗?
这样会查询出很多数据。每购买一次就是一条。 [/quote] 那就只取一条呗,select substr(Order_num,1,2) from t where col = 手机号 and rownum=1,有返回不是新用户,而且可以判断其单位
JavaAlpha 2016-09-01
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
查询一张大表(20W)条数据,每次查询10到100条, 直接 select * from t where col = 手机号 不可以吗?
这样会查询出很多数据。每购买一次就是一条。
卖水果的net 2016-09-01
  • 打赏
  • 举报
回复
查询一张大表(20W)条数据,每次查询10到100条, 直接 select * from t where col = 手机号 不可以吗?

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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