首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在join语句-SQL中使用12个不同的日期范围,而无需重新运行join 12次

在join语句-SQL中使用12个不同的日期范围,而无需重新运行join 12次
EN

Stack Overflow用户
提问于 2020-06-01 10:18:44
回答 1查看 34关注 0票数 0

假设我有两个表格,格式如下:

表1:访问量

代码语言:javascript
复制
Customer | Website_visit_id  | Time_of_visit

表2:预订

代码语言:javascript
复制
Customer | Hotel_booking_id  | Time_of_booking

我创建了一个表,其中有客户的id,他们的预订,以及他们在预订之前30天内对网站进行的所有访问,使用以下代码:

代码语言:javascript
复制
select customer, booking_id, website_visit_id
from visits a 
  join booking b 
    on a.customer = b.customer
   and Time_of_visit between dateadd(days, -30, time_of_booking) and time_of_booking

我的问题是-如果我想扩展这个时间范围,看看在预订之前60,90,120...365天内有多少访问量,我如何才能最有效地做到这一点(而不是必须在更改了dateadd编号的情况下运行连接12次?有没有办法在join语句中添加一个参数来代替'30‘天?

输出的形式可以是预订及其相应访问/时间范围的列表,也可以是每个时间范围内的预订和访问总数的表格(如下所示:

代码语言:javascript
复制
Time_frame| Customer | Hotel_booking_id | Number of visits
T30D      | Mike     | 1A               | 5
T60D      | Mike     | 1A               | 15
T90D      | Mike     | 1A               | 22
T120D     | Mike     | 1A               | 27

Thank you in advance
EN

回答 1

Stack Overflow用户

发布于 2020-06-01 10:27:02

如果你想动态构建一个查询,你应该看看你的数据库是否支持动态查询/sql。本质上,不是运行查询,而是运行带有逻辑的存储过程,以确定查询参数应该是什么。在此基础上,您将能够基于首选逻辑动态创建查询并执行它。

我不确定您使用的是哪个DB,但是我知道MySQL和Oracle支持这一点。

有关详细信息,请参阅以下链接:

Oracle Documentation MySQL Documentation

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62124800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档