我有两个表:一个campaign表和一个transactions表。campaign表包含商家的名称和他们进行促销活动的日期,如下所示:
start_date end_date merchant campaign_name
2019-09-01 2019-09-04 Store A Holiday Discount
2019-10-30 2019-11-01 Store B Halloweenfesttransactions表包含原始事务,如下所示:
trx_no trx_date customer_id product price merchant
1 2019-09-01 182631231 Stocking 6.50 Store A
2 2019-09-06 184234225 Helmet 9.20 Store A
3 2019-10-06 185362289 Pen 2.10 Store B
4 2019-10-31 189988123 Hat 4.30 Store B由于商店A仅在9月1日至4日期间开展活动,而商店B仅在10月30日至11月1日期间进行活动,我如何才能通过加入这两个表来仅返回在促销活动期间进行的交易?我可以根据商家加入,但如何只拉取start_date和end_date之间的数据
发布于 2019-10-21 19:56:08
您可以使用join并将日期条件放在on子句中:
select t.*, c.campaign_name
from campaign c join
transactions t
on t.merchant = c.merchant and
t.trx_date between c.start_date and c.end_date;发布于 2019-10-21 20:07:28
您可以使用join并将日期范围过滤器放在where子句中。将日期检查放在where子句中的原因是,join针对相等条件进行了更优化。然后,我们可以根据范围过滤器过滤数据集。
查询将如下所示:
SELECT
b.*, a.campaign_name
FROM
campaign a
INNER JOIN
transactions b
ON
a.merchant = b.merchant
WHERE
b.trx_date BETWEEN a.start_date AND a.end_date;https://stackoverflow.com/questions/58485773
复制相似问题