我正在按日创建一个客户活动表,这需要9个CTE。我要交叉的第一个表将所有客户唯一的ID与日历表的日期连接起来。因此,每天都会有多行具有相同的唯一ID。问题是无论以下CTE中的日期如何,都要确保日期是连续的。这是一个简短的例子,看起来像这样:
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]
以此类推——这样每个客户的GUID都有连续的日期,从他们账户的创建日期(即2015年3月13日)开始,到当前日期结束。
创建日期在表1中,具有唯一的ID,我将它与一个日期表连接起来。我的问题是,我无法让查询以每个唯一ID的最小创建日期运行。因为如果我不创建最小开始日期,查询将永远运行(它试图为每个连续日期创建每个唯一的ID,甚至在创建客户帐户之前。)
这是我现在的代码。有人能告诉我是否我做对了最小的。创建日期吗?当我运行查询时,它仍然只是超时。
with
cte_carrier_guid (carrier_guid, email, date, carrier_id) as
(
SELECT
guid as carrier_guid
,mc.email
,dt2.date as date
,mc.id as carrier_id
FROM ctms_db_public.msd_carrier mc
CROSS JOIN public.dim_calendar dt2
WHERE dt2.date <= CURRENT_DATE
AND mc.created_at >= dt2.date
GROUP BY guid, mc.id, dt2."date", mc.email
ORDER BY guid, dt2.date asc
)
Select top 10 * from cte_carrier_guid
在这里:
dt2.date <= CURRENT_DATE AND mc.created_at >= dt2.date
因为您需要用户创建日期和今天之间的日期,您可能需要创建日期上的不等式条件。我发现当我们把下限放在第一位时,更容易理解:
dt2.date >= mc.created_at AND dt2.date <= CURRENT_DATE
关于查询的其他事项:
>
本质上你需要一个内部连接,所以用它代替
交叉连接。。。其中
;更清楚
在cte中按
订购对我来说毫无意义
你真的需要分组吗?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
问题内容: 好吧,假设我有一个看起来像这样的表: 任何人都有关于如何查询它的想法,因此数据看起来像 问题答案: 我不会将ID放在这里,因为我认为它与查询无关。如果您愿意,请稍后再说。这是一个MSSQL查询。 可以很容易地将其翻译为其他数据库类型。
问题内容: 我在从表中显示正确的数据时遇到了麻烦。我不太确定要搜索什么。我不确定min(column)或max(column)在这里对我有帮助。让我们看看我是否可以解释我的问题。 我的表包含以下数据: 我将以一种观点来介绍这一点。它将按代码分组。 我想要的是此输出: 如您所见,DateTo和DateFrom之间是否存在间隙,我希望将其显示为两行。但是,如果具有相同代码的下一个“ DateFrom”
问题内容: 如果可能的话,在以下情况下,我希望使用joda或非joda解决方案 假设我的一周从2012年5月2日开始,给定的当前日期为02/22/2011。我需要计算给定当前日期的星期开始和结束日期。因此,我的解决方案的星期应该从02/19开始,而星期在02/25结束。为简单起见,我将我的工作日设置为02/05/2011,但是可能是任何一天,我的工作日始终为7天。 我现有的代码如下,但似乎无法按预
问题内容: 我想检查日期是否在开始日期和结束日期之间。 我添加了一个where子句 但问题在于它不包含“ 2010-04-15”。 它应该包括结束日期,我该怎么办? 请帮我 问候, 潘卡 问题答案: 明确指定时间部分:
问题内容: 我接收到来自Twitter的特定日期以特定格式发送的Twitter消息: 我想将这些日期存储在带有djangos DateTimeField字段的postgresql中的“带有时区的时间戳”字段中。但是,当我存储该字符串时,出现此错误: 我可以自动将twitter datetype转换为python datetime时间(在我的应用程序中的其他地方可以保存日期)。 问题答案: 编写这样
问题内容: 从DATETIME中删除 日期 的最佳方法是什么,以便仅剩下 时间 进行比较? 我知道我可以执行以下操作: 但这涉及转换和字符。如果我想检查DATETIME列中是否存储了另外两个时间之间的时间(包括分钟),是否有一种优雅的方法可以执行此操作而不必依赖转换为字符串? 问题答案: 从Essential SQL Server日期,时间和DateTime函数中 尝试使用TimeOnly函数: