<急>请教一个SQL语句

fpzgm 2010-09-19 02:55:30
订单信息表t1:order_id(订单号) add_time(下单时间) tourist_id(客户信息)
客户信息表t2: tourist_id(客户信息) tel1 tel2 tel3 tel4(四个电话或手机号码)
呼出信息表t3: tel(呼出电话) calltime(呼出时间)

其中t1中tourist_id关联到t2中tourist_id,t3中的tel可能为t2中的任一个

查询过程:根据order_id找到4个号码,根据4个号码找到对应到该order_id的呼出时间,然后用calltime-add_time得到呼出时间差

查询结果: 订单号 下单时间 第一次呼出时间差 第二次呼出时间差 第三次呼出时间差

望高手解答!




...全文
106 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
fpzgm 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 sqlcenter 的回复:]
a
回复框工具栏里点“插入源代码”按钮,选择代码格式。

b
你能确保正确就行,比如不允许24小时内连续下单、24小时必须呼出完毕。
反正王道的做法是关联起来。
[/Quote]
[code=SQL][select '可以了,给你分' as 谢谢]
fpzgm 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 sqlcenter 的回复:]
a
回复框工具栏里点“插入源代码”按钮,选择代码格式。

b
你能确保正确就行,比如不允许24小时内连续下单、24小时必须呼出完毕。
反正王道的做法是关联起来。
[/Quote]
[select '好像不行啊' as a]
[code=SQL][/select '好像不行啊' as a]
[code=SQL]
select '好像不行啊' as a
[select '好像不行啊' as a
=SQL][/code]
fpzgm 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 sqlcenter 的回复:]
a
回复框工具栏里点“插入源代码”按钮,选择代码格式。

b
你能确保正确就行,比如不允许24小时内连续下单、24小时必须呼出完毕。
反正王道的做法是关联起来。
[/Quote]

了解了,
[code=SQL][/select '这样就行了吗']
SQLCenter 2010-09-19
  • 打赏
  • 举报
回复
a
回复框工具栏里点“插入源代码”按钮,选择代码格式。

b
你能确保正确就行,比如不允许24小时内连续下单、24小时必须呼出完毕。
反正王道的做法是关联起来。
fpzgm 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 sqlcenter 的回复:]
引用 11 楼 fpzgm 的回复:
那能取正值的那些时间差,在join on的后面加个t3.calltime>t1.addtime行吗?
另外,请教下,怎么使结果呈现出有代码框的格式


t3.calltime>t1.addtime不行,交叉部分仍然无法区分。

什么是代码框的格式?
[/Quote]
就是5楼的语句格式,sql code标志,里面和在软件里面写出来的一样
另外,由于下单后一定时间内对4个号码的呼出应该是同一个order_id,时间长了就不一定了,
所以加上t3.calltime>t1.addtime后取到的时间差在某段时间内或是大部分是正确的吧?
SQLCenter 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 fpzgm 的回复:]
那能取正值的那些时间差,在join on的后面加个t3.calltime>t1.addtime行吗?
另外,请教下,怎么使结果呈现出有代码框的格式
[/Quote]

t3.calltime>t1.addtime不行,交叉部分仍然无法区分。

什么是代码框的格式?
fpzgm 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sqlcenter 的回复:]
引用 8 楼 fpzgm 的回复:

引用 6 楼 sqlcenter 的回复:
join t3 on t2.tel1=t3.tel or t2.tel2=t3.tel or t2.tel3=t3.tel or t2.tel4=t3.tel
--
复制,忘了改

为什么算出来的时间差还有负值?


呼出信息表t3: tel(呼出电话) calltime(呼出时间)
--
和……
[/Quote]
那能取正值的那些时间差,在join on的后面加个t3.calltime>t1.addtime行吗?
另外,请教下,怎么使结果呈现出有代码框的格式
SQLCenter 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fpzgm 的回复:]

引用 6 楼 sqlcenter 的回复:
join t3 on t2.tel1=t3.tel or t2.tel2=t3.tel or t2.tel3=t3.tel or t2.tel4=t3.tel
--
复制,忘了改

为什么算出来的时间差还有负值?
[/Quote]

呼出信息表t3: tel(呼出电话) calltime(呼出时间)
--
和t1.order_id应该要有关联,否则相同的tourist_id无法区分是哪个order_id呼出的,出现负值也就不足为奇。
fpzgm 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lzd_83 的回复:]
呼出时间在下单时间前怎么办。
[/Quote]
呼出时间不会在下单时间之前,否则就不是同一个订单号
因为先下单才呼出
fpzgm 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sqlcenter 的回复:]
join t3 on t2.tel1=t3.tel or t2.tel2=t3.tel or t2.tel3=t3.tel or t2.tel4=t3.tel
--
复制,忘了改
[/Quote]
为什么算出来的时间差还有负值?
Rotel-刘志东 2010-09-19
  • 打赏
  • 举报
回复
呼出时间在下单时间前怎么办。
SQLCenter 2010-09-19
  • 打赏
  • 举报
回复
join t3 on t2.tel1=t3.tel or t2.tel2=t3.tel or t2.tel3=t3.tel or t2.tel4=t3.tel
--
复制,忘了改
SQLCenter 2010-09-19
  • 打赏
  • 举报
回复
with cte as
(
select id=row_number()over(partition by t1.order_id order by t3.calltime),
t1.order_id, t1.add_time, diff=datediff(second, t1.add_time, t3.calltime)
from t1
join t2 on t1.tourist_id=t2.tourist_id
join t3 on t2.tel1=t3.tel or t2.tel2=t3.tel or t2.tel2=t3.tel or t2.tel2=t3.tel
)
select order_id,
[1] = max(case id when 1 then diff end),
[2] = max(case id when 2 then diff end),
[3] = max(case id when 3 then diff end)
from cte group by order_id
fpzgm 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sqlcenter 的回复:]
订单号 下单时间 第一次呼出时间差 第二次呼出时间差 第三次呼出时间差
---------
哦,没留意这个,那呼出超过3次呢,要不要全部列出?
[/Quote]
不用全部列出,只要以3次的为例就可以了(或者是一个固定的次数)
SQLCenter 2010-09-19
  • 打赏
  • 举报
回复
订单号 下单时间 第一次呼出时间差 第二次呼出时间差 第三次呼出时间差
---------
哦,没留意这个,那呼出超过3次呢,要不要全部列出?
fpzgm 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sqlcenter 的回复:]
相同的order_id、tourist_id呼了不同的tel,该怎么算?
[/Quote]
不管呼了4个号码中的任何一个,都归到该订单号的呼出时间,都可以算一次呼出时间差,若没有呼出,则为空
SQLCenter 2010-09-19
  • 打赏
  • 举报
回复
相同的order_id、tourist_id呼了不同的tel,该怎么算?

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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