当前位置: 首页 > 知识库问答 >
问题:

带有日期范围的雪花左联接

殷永嘉
2023-03-14

我正在与一个带有日期范围的雪花数据库左联接查询作斗争。请在下面找到样表内容

我的雪花SQL查询:选择o.ORDER_DATE,大小写当ORDER_DATE为NULL时,则“no”否则“yes”结束为ORDER_PLACED,C.customer_id,C.name FROM CUSTOMER C左联接C.customer_id=o.customer_id和o.ORDER_DATE>=DATEADD(DAY,-3,CURRENT_DATE)

我期望的输出-我想得到与所有客户的最后3天记录,以及他们是否做出了订单,如下所示

我不知道是不是日期范围的问题(反正我需要日期范围),因为我在第一天就得到了所需的结果。但在剩下的几天里,我只有在下订单时才会收到这些记录。如预期结果所示,我希望得到所有的客户记录与细节,如他们是否作出了一个订单或没有。

提前致谢

共有1个答案

王念
2023-03-14

使用交叉联接生成行,然后使用左联接引入结果:

SELECT O.CTE, C.CUSTOMER_ID, C.NAME,
       MAX(CASE WHEN O.CUSTOMER_ID IS NULL THEN 'NO' ELSE 'YES' END) AS ORDER_PLACED, 
FROM CUSTOMER C CROSS JOIN
     (SELECT DISTINCT O.ORDER_DATE AS dte
      FROM ORDERS O
      WHERE O.ORDER_DATE >= DATEADD(DAY, -3, CURRENT_DATE)
     ) D LEFT JOIN
     ORDERS
     ON C.CUSTOMER_ID =  AND AND D.DTE = O.ORDER_DATE
GROUP BY O.CTE, C.CUSTOMER_ID, C.NAME;

当然,您可以为d派生表显式列出日期。

 类似资料:
  • > 每个对象表示一个重复发生的事件。该事件可以在多个日期发生。因此,请考虑以下内容: 我有一个日历在客户端,用户可以选择一个日期范围。 > 对所选日期范围的每个条目进行调用,并在客户端处理聚合。问题是会有大量的读取,因为我们会多次读取重叠的日期范围内的同一个列表对象。 尝试使用类似ElasticSearch/Algolia的服务来完成此操作 任何建议都会很有帮助!

  • 问题内容: 在MySQL中,如果我有日期范围的列表(范围开始和范围结束)。例如 我想检查另一个日期范围是否包含列表中已经存在的任何范围,我该怎么做? 例如 问题答案: 这是一个经典问题,如果您逆转逻辑,实际上会更容易。 让我举一个例子。 我将在此处发布一个时间段,以及其他时间段的所有不同变体以某种方式重叠。 另一方面,让我发布所有不重叠的内容: 因此,如果您简单地将比较简化为: 那么您将找到所有不

  • 问题内容: 我需要填充一个表,该表将存储2个给定日期之间的日期范围:09/01/11-10/10/11 因此,在这种情况下,该表将从2011年9月1日开始存储,直到每天存储到10/10/11,我想知道在SQL Server中是否有一种巧妙的方法-我目前正在使用SQL Server 2008 。 谢谢 问题答案: 在SQL 2005+上很容易;如果您有数字表或理货表,操作会更容易。我在下面伪造了它:

  • 我有一个数据集,日期设置为每月的第一个。例如- 我需要加入这张桌子: 通常情况下,我会对这一条加一个权利- ...它工作良好,日期2021-02-01。那是在2021-01-30和2021-02-12之间。 类似地,2021-03-01日期介于2021-02-27和2021-03-12之间 然而!开始日期为2021-02-13、结束日期为2021-02-26的支付期间的值为空。我希望表A中二月份的

  • 我在一个表(即TAB1)中有多个日期范围,如下所示。 对上面的SQL查询有什么建议吗?

  • 问题内容: 我的数据库中有以下一组匹配日期的日期(dd / MM / yyyy): 事件具有开始和结束日期(时间无关紧要),并且endDate为NULL表示事件仍在进行中。 我想确定的是两个任意日期之间的日期范围,其中a)没有事件,b)事件重叠。 因此,对于输入日期范围01/04/2009-30/06/2009,我希望得到以下结果: 注意,作为结果,两个相邻的重叠范围是可以接受的。 谁能用SQL算