假设我有两个表格,格式如下:
表1:访问
Customer | Website_visit_id | Time_of_visit
表2:预订
Customer | Hotel_booking_id | Time_of_booking
我创建了一个表,其中包含客户的id、他们的预订以及他们在预订前30天内对网站的所有访问:
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,90120…365天内有多少次访问,我该如何最有效地做到这一点(而不是在dateadd号码更改的情况下运行join 12次?有没有办法在join语句中添加一个参数来代替“30”天?
输出的形式可以是预订列表及其相应的访问/时间范围,也可以是预订表以及每个时间范围内的总访问量(如下所示:
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
1条答案
按热度按时间x7rlezfr1#
如果您希望动态地构建查询,那么应该查看数据库是否支持dynamicquerys/sql。从本质上讲,您不需要运行查询,而是需要运行一个带有逻辑的存储过程来确定查询参数应该是什么。从那里,您将能够基于首选逻辑动态创建查询并执行它。
我不知道你用的是哪个数据库,但是我知道mysql和oracledbs支持这个。
更多信息请参见以下链接:
oracle文档MySQL文档