如何解决难于将两个具有连续日期从客户创建日期开始,到当前日期结束的日期表连接在一起?
我正在按日表创建客户活动,该活动需要9个CTE。 我想将所有客户唯一ID与日历表的日期交叉连接的第一个表。因此,每天会有多行具有相同的唯一ID。 问题是要确保这些天是连续的,而不管以下CTE中的日期如何。 这是一个简短的示例:
open()
依此类推-每个客户的GUID都有连续的日期,从其帐户的创建日期(即2015年3月13日)开始,到当前日期结束。
创建日期在具有唯一ID的表1上,我将其与日期表结合在一起。 我的问题是我无法使查询以每个唯一ID的最小创建日期运行。因为如果我没有指定最小开始日期,查询将永远运行(它会尝试为每个连续的日期创建每个唯一的ID,即使在创建客户帐户之前也是如此)。
这是我现在拥有的代码。 谁能告诉我我是否做过记录。创建日期对吗?当我运行查询时,它仍然只是超时。
GUID DATE CONDITIONS
1 3/13/2015 [NULL]
1 3/14/2015 Y
1 3/15/2015 [NULL]
....
1 9/2/2020 Y
2 4/15/2015 Y
2 4/16/2015 [NULL]
2 4/17.2015 [NULL]
2 4/18/2015 Y
...
2 9/2/2020 [NULL]
解决方法
这里:
dt2.date <= CURRENT_DATE AND mc.created_at >= dt2.date
由于您希望日期在用户的创建日期和今天之间,因此您可能希望在创建日期上出现不平等条件。当我们将下限放在首位时,我发现更容易遵循:
dt2.date >= mc.created_at AND dt2.date <= CURRENT_DATE
有关查询的其他内容:
-
本质上您想要一个
INNER JOIN
,所以用它代替CROSS JOIN ... WHERE
;更清楚 -
ORDER BY
对我来说毫无意义 -
您真的需要
GROUP BY
吗?SELECT
子句中的列与GROUP BY
中的列相同,因此,所有这些操作都是删除可能的重复项(但是为什么会有重复项?)
您可以将cte的措辞表达为:
SELECT ...
FROM ctms_db_public.msd_carrier mc
INNER JOIN public.dim_calendar dt2 ON dt2.date >= mc.created_at
WHERE dt2.date <= CURRENT_DATE
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。