我有两个桌子。第一个表如下所示:
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
现在,如果时间戳记介于第二个表中给出的两个连续的Closingtimes之间,我想更新它。如相应的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给定的上下限之间“循环”。
任何关于我将如何进行此处的提示将不胜感激!
答案 0 :(得分:0)
我不确定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 |
-----------+---------------------+------------+---------------------+