【问题标题】:Formulate correlated subqueries (row-wise check of condition) in Snowflake SQL在 Snowflake SQL 中制定相关子查询(按行检查条件)
【发布时间】:2018-11-15 16:44:52
【问题描述】:

我有两张桌子。第一个表如下所示:

CompanyID  | TIMESTAMP           | NewsitemID 
---------------------------------------------    
ID1        | 2000-01-06 15:00:00 | 1       
ID2        | 2000-01-06 15:32:00 | 2
ID1        | 2000-01-07 14:00:00 | 3
ID3        | 2000-01-07 17:00:00 | 4

现在我想更新时间戳,如果它位于第二个表中给出的两个连续关闭时间之间。新的时间戳应该是对应的 SelectedTimestamp 指示的两个连续条目中的第二个。这是第二张表:

Closingtime         | SelectedTimestamp 
-----------------------------------------          
2000-01-05 16:00:00 | --
2000-01-06 16:00:00 | 2000-01-06 16:00:00
2000-01-07 16:00:00 | 2000-01-07 16:00:00
2000-01-10 16:00:00 | 2000-01-10 16:00:00

所以,我想要实现的是:

CompanyID  | TIMESTAMP           | NewsitemID | NewTimestamp
-------------------------------------------------------------------    
ID1        | 2000-01-06 15:00:00 | 1          | 2000-01-06 16:00:00    
ID2        | 2000-01-06 15:32:00 | 2          | 2000-01-06 16:00:00
ID1        | 2000-01-07 14:00:00 | 3          | 2000-01-07 16:00:00
ID3        | 2000-01-07 17:00:00 | 4          | 2000-01-10 16:00:00

但我对 Snowflake SQL 还是很陌生,即使启动查询也有问题。我想我可能会在

的方向上使用一些东西
SELECT SelectedTimestamp 
WHERE TIMESTAMP BETWEEN lower_bound AND upper_bound

但我不知道如何“循环”通过 ClosingTime 给出的下限和上限。

非常感谢任何关于我如何在这里进行的提示!

【问题讨论】:

  • 您的问题可能需要一些澄清,请参阅我的评论。
  • 谢谢,希望现在更清楚了!

标签: sql correlated-subquery snowflake-cloud-data-platform


【解决方案1】:

我不能 100% 确定您想要的预期行为是什么,因为第二个表列是相同的。 此外,您没有指定“下限/上限”对您意味着什么,但我假设您的意思是连续两行。

无论哪种情况,Snowflake 实际上都对子查询提供了相当丰富的支持。希望这是您所需要的:

select first.*, 
(select min(selectedtimestamp) 
  from second where closingtime > first.timestamp) as newtimestamp 
from first;
-----------+---------------------+------------+---------------------+
 COMPANYID |      TIMESTAMP      | NEWSITEMID |    NEWTIMESTAMP     |
-----------+---------------------+------------+---------------------+
 id1       | 2000-01-06 15:00:00 | 1          | 2000-01-06 16:00:00 |
 id2       | 2000-01-06 15:32:00 | 2          | 2000-01-06 16:00:00 |
 id3       | 2000-01-07 14:00:00 | 3          | 2000-01-07 16:00:00 |
 id4       | 2000-01-07 17:00:00 | 4          | 2000-01-10 16:00:00 |
-----------+---------------------+------------+---------------------+

【讨论】:

    猜你喜欢
    • 2022-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多