Formulate correlated subqueries (row-wise check of condition) in Snowflake SQL
I have two tables. The first table looks like this:
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
Now I want to update the timestamp if it falls inbetween two consecutive Closingtimes given in the second table. The new timestamp should be the second of the two consecutive entries as indicated by the corresponding SelectedTimestamp. This is the second table:
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
So, what I want to achieve is:
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
But I am pretty new to Snowflake SQL and have problems even with starting the query. I have figured that I could probably use something in the direction of
SELECT SelectedTimestamp
WHERE TIMESTAMP BETWEEN lower_bound AND upper_bound
but I have no clue how to "loop" through the lower and upper bounds given by the ClosingTime.
Any hint on how I could proceed here would be very much appreciated!
sql correlated-subquery snowflake-datawarehouse
add a comment |
I have two tables. The first table looks like this:
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
Now I want to update the timestamp if it falls inbetween two consecutive Closingtimes given in the second table. The new timestamp should be the second of the two consecutive entries as indicated by the corresponding SelectedTimestamp. This is the second table:
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
So, what I want to achieve is:
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
But I am pretty new to Snowflake SQL and have problems even with starting the query. I have figured that I could probably use something in the direction of
SELECT SelectedTimestamp
WHERE TIMESTAMP BETWEEN lower_bound AND upper_bound
but I have no clue how to "loop" through the lower and upper bounds given by the ClosingTime.
Any hint on how I could proceed here would be very much appreciated!
sql correlated-subquery snowflake-datawarehouse
Your question could use some clarifications, see my comment.
– Marcin Zukowski
Nov 18 '18 at 8:08
Thanks, I hope it's clearer now!
– Jeannine
Nov 19 '18 at 20:36
add a comment |
I have two tables. The first table looks like this:
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
Now I want to update the timestamp if it falls inbetween two consecutive Closingtimes given in the second table. The new timestamp should be the second of the two consecutive entries as indicated by the corresponding SelectedTimestamp. This is the second table:
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
So, what I want to achieve is:
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
But I am pretty new to Snowflake SQL and have problems even with starting the query. I have figured that I could probably use something in the direction of
SELECT SelectedTimestamp
WHERE TIMESTAMP BETWEEN lower_bound AND upper_bound
but I have no clue how to "loop" through the lower and upper bounds given by the ClosingTime.
Any hint on how I could proceed here would be very much appreciated!
sql correlated-subquery snowflake-datawarehouse
I have two tables. The first table looks like this:
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
Now I want to update the timestamp if it falls inbetween two consecutive Closingtimes given in the second table. The new timestamp should be the second of the two consecutive entries as indicated by the corresponding SelectedTimestamp. This is the second table:
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
So, what I want to achieve is:
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
But I am pretty new to Snowflake SQL and have problems even with starting the query. I have figured that I could probably use something in the direction of
SELECT SelectedTimestamp
WHERE TIMESTAMP BETWEEN lower_bound AND upper_bound
but I have no clue how to "loop" through the lower and upper bounds given by the ClosingTime.
Any hint on how I could proceed here would be very much appreciated!
sql correlated-subquery snowflake-datawarehouse
sql correlated-subquery snowflake-datawarehouse
edited Nov 19 '18 at 20:34
Jeannine
asked Nov 15 '18 at 16:44
JeannineJeannine
33
33
Your question could use some clarifications, see my comment.
– Marcin Zukowski
Nov 18 '18 at 8:08
Thanks, I hope it's clearer now!
– Jeannine
Nov 19 '18 at 20:36
add a comment |
Your question could use some clarifications, see my comment.
– Marcin Zukowski
Nov 18 '18 at 8:08
Thanks, I hope it's clearer now!
– Jeannine
Nov 19 '18 at 20:36
Your question could use some clarifications, see my comment.
– Marcin Zukowski
Nov 18 '18 at 8:08
Your question could use some clarifications, see my comment.
– Marcin Zukowski
Nov 18 '18 at 8:08
Thanks, I hope it's clearer now!
– Jeannine
Nov 19 '18 at 20:36
Thanks, I hope it's clearer now!
– Jeannine
Nov 19 '18 at 20:36
add a comment |
1 Answer
1
active
oldest
votes
I'm not 100% sure what is the expected behavior you want, as the second table columns are identical.
Also, you didn't specify what "lower/upper bounds" mean for you, but I'll assume you mean two consecutive rows.
In either case, Snowflake actually has pretty rich support for subqueries. Hopefully this is what you need:
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 |
-----------+---------------------+------------+---------------------+
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53324160%2fformulate-correlated-subqueries-row-wise-check-of-condition-in-snowflake-sql%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
I'm not 100% sure what is the expected behavior you want, as the second table columns are identical.
Also, you didn't specify what "lower/upper bounds" mean for you, but I'll assume you mean two consecutive rows.
In either case, Snowflake actually has pretty rich support for subqueries. Hopefully this is what you need:
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 |
-----------+---------------------+------------+---------------------+
add a comment |
I'm not 100% sure what is the expected behavior you want, as the second table columns are identical.
Also, you didn't specify what "lower/upper bounds" mean for you, but I'll assume you mean two consecutive rows.
In either case, Snowflake actually has pretty rich support for subqueries. Hopefully this is what you need:
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 |
-----------+---------------------+------------+---------------------+
add a comment |
I'm not 100% sure what is the expected behavior you want, as the second table columns are identical.
Also, you didn't specify what "lower/upper bounds" mean for you, but I'll assume you mean two consecutive rows.
In either case, Snowflake actually has pretty rich support for subqueries. Hopefully this is what you need:
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 |
-----------+---------------------+------------+---------------------+
I'm not 100% sure what is the expected behavior you want, as the second table columns are identical.
Also, you didn't specify what "lower/upper bounds" mean for you, but I'll assume you mean two consecutive rows.
In either case, Snowflake actually has pretty rich support for subqueries. Hopefully this is what you need:
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 |
-----------+---------------------+------------+---------------------+
answered Nov 18 '18 at 8:07
Marcin ZukowskiMarcin Zukowski
1,8701819
1,8701819
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53324160%2fformulate-correlated-subqueries-row-wise-check-of-condition-in-snowflake-sql%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Your question could use some clarifications, see my comment.
– Marcin Zukowski
Nov 18 '18 at 8:08
Thanks, I hope it's clearer now!
– Jeannine
Nov 19 '18 at 20:36