【发布时间】:2020-04-05 12:34:33
【问题描述】:
我正在尝试捕获包括今天在内的每一封电子邮件,直到第二天上午 10.30。我知道我要在我的加入中添加逻辑,但我不确定我做得是否正确。请问有人可以告诉这是正确的还是有更好的方法来做到这一点?
我尝试添加到 JOIN 中的内容
LEFT JOIN events b ON a.signup_dt BETWEEN b.mst_dt AND b.mst_dt +1 AND Extract(HOUR From b.mst_dt+1) <= 9
AND a.email_address = b.email_address
活动日期(我有电子邮件地址列,但此处未包含) enter image description here
Ops 表中的日期(我有一个名为 signup_dttm 的日期时间列) enter image description here
澄清 - 在我的操作表上,我有特定日期的所有电子邮件捕获。我们将为从 Ops 表中捕获的每封电子邮件发送一封信息电子邮件。该数据(即我们在 Ops 表中发送的电子邮件以及日期和时间)存储在事件表中。例如,我们昨天(2019 年 12 月 11 日)捕获了 500 封电子邮件。然后我们昨天发送了 400 封信息电子邮件。剩下的其他 100 封电子邮件我们将在今天(2019 年 12 月 12 日)上午 10.30 之前的某个时间发送。同样,那些发送数据将存储在事件表中。这就是为什么我要尝试捕获从昨天到今天上午 9 点的所有内容并加入 ops 表的原因。希望这会有意义,如果不是请告诉我。任何帮助都将受到高度赞赏。
非常感谢
【问题讨论】:
-
不确定我是否遵循这里的所有内容,但我认为您需要使用 OR 来处理您的 2 个日期。按照您现在的方式,您将两天的时间限制在 AND (signup_dt = b.mst_dt OR (a.signup_dt = b.mst_dt + 1 and extract(hour...))
-
@Andrew 非常感谢您的评论。这个逻辑是否给了我这个,例如昨天到今天早上 9 点。 2019 年 12 月 11 日到 2019 年 12 月 12 日上午 9 点之间的动态日期是什么意思?
-
是的,就是这样。按照您目前的方式,您只能在 11 日上午 9 点之前和 12 日上午 9 点之前获得所有内容。除非我误会了,否则您希望在 11 日的每一天以及 12 日上午 9 点之前的所有时间。
-
@Andrew 谢谢,我想要 11 日的所有内容,以及 12 日上午 9 点之前的所有内容。这行得通吗?很抱歉,如果我让你感到困惑。如果这是正确的,请作为答案,以便我选择它。非常感谢您的帮助
-
@Andrew 我想要其他方式。我想要 11 日的所有内容,以及 12 日上午 9 点之前的所有内容。对困惑感到抱歉。我该怎么做呢?谢谢
标签: sql database join left-join teradata