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

jhdbpxl9  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(406)

假设我有两个表格,格式如下:
表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
x7rlezfr

x7rlezfr1#

如果您希望动态地构建查询,那么应该查看数据库是否支持dynamicquerys/sql。从本质上讲,您不需要运行查询,而是需要运行一个带有逻辑的存储过程来确定查询参数应该是什么。从那里,您将能够基于首选逻辑动态创建查询并执行它。
我不知道你用的是哪个数据库,但是我知道mysql和oracledbs支持这个。
更多信息请参见以下链接:
oracle文档MySQL文档

相关问题