我有两张表:一张包含有关产品及其售价的信息
article_id sell_price_at validity_start_at validity_end_at
advFUJKAx 2.99 2023-06-14T10:46:07 2024-02-15T00:59:59
advFUJKAx 2.99 2022-05-11T04:20:13 2023-06-14T10:46:07
advFUJKAx 2.99 2022-05-10T13:23:18 2022-05-11T04:20:13
advFUJKAx 2.99 2022-05-10T13:08:45 2022-05-10T13:23:18
另一则关于促销和促销价值的内容。促销在其生命周期内可能会发生变化,例如,我们认为促销太多,然后将促销更改为更少的内容。
article_id promotion_id promotion_value promotion_mechanism real_start_datetime real_end_datetime
advFUJKAx 2023-06-27T23:59:59 2024-02-15T00:59:59
advFUJKAx 2GLCMltLyw 1.8 IMMEDIATE_DISCOUNT 2023-06-22T13:31:46 2023-06-27T23:59:59
advFUJKAx 2GLCMltLyw 2.49 IMMEDIATE_DISCOUNT 2023-06-19T08:58:40 2023-06-22T13:31:46
advFUJKAx 2GLCMltLyw 2.49 IMMEDIATE_DISCOUNT 2023-06-16T11:29:38 2023-06-19T08:58:40
advFUJKAx 2GLCMltLyw 2.49 IMMEDIATE_DISCOUNT 2023-06-14T15:05:31 2023-06-16T11:29:38
advFUJKAx 2022-05-18T00:00:00 2023-06-13T00:00:00
advFUJKAx -38_P0evh 2.29 IMMEDIATE_DISCOUNT 2022-05-11T05:03:04 2022-05-18T00:00:00
advFUJKAx -38_P0evh 2.49 IMMEDIATE_DISCOUNT 2022-05-11T00:00:00 2022-05-11T05:03:04
advFUJKAx 2022-05-10T13:08:45 2022-05-11T00:00:00
如您所见,对于促销,我已经填补了间隔中的“漏洞”,这意味着对于给定的文章,促销表中的相应行将始终共享最小开始日期和最大结束日期。另外,我在促销表的中间添加了空行,对应于没有促销活动的时间间隔。
我正在尝试加入这两个表,以便能够重新创建定价日期间隔,同时考虑到促销活动,以便我可以拥有我的
sell_price_at
列和一个新列:sell_price_at_after_discount
。
我只是觉得这很简单,但我无法理解它。我尝试了连接两个表的不同方法,但似乎没有任何效果。
我正在研究 BigQuery,我不知道这是否有影响。
要实现连接两个表并计算
sell_price_at_after_discount
并考虑促销的预期结果,您可以按照以下步骤操作:
Join
article_id
上的两个表,并根据重叠时间间隔进行筛选(products
为 validity_start_at 和 validity_end_at,
promotions
为 real_start_datetime 和 real_end_datetime)。
CASE
语句计算 sell_price_at_after_discount。SELECT
promo.article_id,
promo.promotion_value,
promo.real_start_datetime,
promo.real_end_datetime,
CASE
WHEN promo.promotion_value IS NOT NULL THEN products.sell_price_at - promo.promotion_value
ELSE products.sell_price_at
END AS sell_price_at_after_discount
FROM
`babynames.promotions_table` promo
JOIN (
SELECT
article_id,
sell_price_at,
validity_start_at,
validity_end_at
FROM
`babynames.products_table`
) products
ON
products.article_id = promo.article_id
AND
products.validity_start_at <= promo.real_start_datetime
AND
products.validity_end_at >= promo.real_end_datetime