Select columns and in a jsonb column only return the last element where meets condition
up vote
0
down vote
favorite
I have table documents
, I want to select columns foo and bar. And also the column comments
which is jsonb
.
But in comments
I only need the last element that meets condition "isUser":false
.
"select foo, bar, comments from documents
where comments @> '["isUser":false]'
limit 1 " /*just limit by 1, the latest comment where isUser = false*/
This is how the json looks liks inside comments
column:
[
"text": "1 sample lorem ipsum",
"authorId": "0dcd5a36-2778-4fc4-bbc1-112ed61f1362",
"timestamp": "2018-11-11T08:46:39.608Z",
"isUser": false
,
"text": "2 sample lorem",
"authorId": "0dcd5a36-2778-4fc4-bbc1-112ed61f1362",
"timestamp": "2018-11-11T08:46:41.237Z",
"isUser": true
,{
...]
For comments
I only need the last object in which "isUser":false
postgresql postgresql-9.5
add a comment |
up vote
0
down vote
favorite
I have table documents
, I want to select columns foo and bar. And also the column comments
which is jsonb
.
But in comments
I only need the last element that meets condition "isUser":false
.
"select foo, bar, comments from documents
where comments @> '["isUser":false]'
limit 1 " /*just limit by 1, the latest comment where isUser = false*/
This is how the json looks liks inside comments
column:
[
"text": "1 sample lorem ipsum",
"authorId": "0dcd5a36-2778-4fc4-bbc1-112ed61f1362",
"timestamp": "2018-11-11T08:46:39.608Z",
"isUser": false
,
"text": "2 sample lorem",
"authorId": "0dcd5a36-2778-4fc4-bbc1-112ed61f1362",
"timestamp": "2018-11-11T08:46:41.237Z",
"isUser": true
,{
...]
For comments
I only need the last object in which "isUser":false
postgresql postgresql-9.5
Show us some sample of how the json actually looks like and what output you want to see from it.
– Kaushik Nayak
Nov 11 at 9:54
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I have table documents
, I want to select columns foo and bar. And also the column comments
which is jsonb
.
But in comments
I only need the last element that meets condition "isUser":false
.
"select foo, bar, comments from documents
where comments @> '["isUser":false]'
limit 1 " /*just limit by 1, the latest comment where isUser = false*/
This is how the json looks liks inside comments
column:
[
"text": "1 sample lorem ipsum",
"authorId": "0dcd5a36-2778-4fc4-bbc1-112ed61f1362",
"timestamp": "2018-11-11T08:46:39.608Z",
"isUser": false
,
"text": "2 sample lorem",
"authorId": "0dcd5a36-2778-4fc4-bbc1-112ed61f1362",
"timestamp": "2018-11-11T08:46:41.237Z",
"isUser": true
,{
...]
For comments
I only need the last object in which "isUser":false
postgresql postgresql-9.5
I have table documents
, I want to select columns foo and bar. And also the column comments
which is jsonb
.
But in comments
I only need the last element that meets condition "isUser":false
.
"select foo, bar, comments from documents
where comments @> '["isUser":false]'
limit 1 " /*just limit by 1, the latest comment where isUser = false*/
This is how the json looks liks inside comments
column:
[
"text": "1 sample lorem ipsum",
"authorId": "0dcd5a36-2778-4fc4-bbc1-112ed61f1362",
"timestamp": "2018-11-11T08:46:39.608Z",
"isUser": false
,
"text": "2 sample lorem",
"authorId": "0dcd5a36-2778-4fc4-bbc1-112ed61f1362",
"timestamp": "2018-11-11T08:46:41.237Z",
"isUser": true
,{
...]
For comments
I only need the last object in which "isUser":false
postgresql postgresql-9.5
postgresql postgresql-9.5
edited Nov 11 at 9:55
asked Nov 11 at 9:44
commonSenseCode
9,3211572119
9,3211572119
Show us some sample of how the json actually looks like and what output you want to see from it.
– Kaushik Nayak
Nov 11 at 9:54
add a comment |
Show us some sample of how the json actually looks like and what output you want to see from it.
– Kaushik Nayak
Nov 11 at 9:54
Show us some sample of how the json actually looks like and what output you want to see from it.
– Kaushik Nayak
Nov 11 at 9:54
Show us some sample of how the json actually looks like and what output you want to see from it.
– Kaushik Nayak
Nov 11 at 9:54
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
accepted
You may use jsonb_array_elements .. WITH ORDINALITY
to get the order
select foo, bar, j.comments
from
documents cross
join lateral jsonb_array_elements(comments) WITH ORDINALITY j(comments, rn)
WHERE
(j.comments ->> 'isUser'):: boolean is false
ORDER BY j.rn DESC LIMIT 1;
EDIT
I want it to limit to 1 json object inside the jsonarray in comments
select DISTINCT ON ( foo, bar) foo,bar,comments
FROM
( select d.foo,d.bar,j.comments,j.rn
from
documents d cross
join lateral jsonb_array_elements(comments) WITH ORDINALITY j(comments, rn)
WHERE
(j.comments ->> 'isUser'):: boolean is false
) s
ORDER BY foo,bar,rn desc ;
Demo
thanks, kinda works when I add thelimit 1
at the end but is not getting the last in json array, is insertion order not warrantied?
– commonSenseCode
Nov 11 at 10:22
@commonSenseCode : check now.
– Kaushik Nayak
Nov 11 at 10:30
Some progress, so I tested inserting more values. Right now this is limiting the main row return (foo, bar, comments), I want it to limit to 1 json object inside the jsonarray incomments
, not to limit the rows.
– commonSenseCode
Nov 11 at 10:38
@commonSenseCode : It's basically the TOP 1 per group problem. You may useDISTINCT ON
. check edit. Please remember that when you ask a question, your sample data and expected output should reflect the complete requirement.
– Kaushik Nayak
Nov 11 at 11:37
Hi Kaushik this is way nearer to what I need, is there a wat to order DESC by field timestamp inside comments. Somehow sometimes it doesn't give the last added comment
– commonSenseCode
Nov 11 at 11:43
|
show 4 more comments
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
accepted
You may use jsonb_array_elements .. WITH ORDINALITY
to get the order
select foo, bar, j.comments
from
documents cross
join lateral jsonb_array_elements(comments) WITH ORDINALITY j(comments, rn)
WHERE
(j.comments ->> 'isUser'):: boolean is false
ORDER BY j.rn DESC LIMIT 1;
EDIT
I want it to limit to 1 json object inside the jsonarray in comments
select DISTINCT ON ( foo, bar) foo,bar,comments
FROM
( select d.foo,d.bar,j.comments,j.rn
from
documents d cross
join lateral jsonb_array_elements(comments) WITH ORDINALITY j(comments, rn)
WHERE
(j.comments ->> 'isUser'):: boolean is false
) s
ORDER BY foo,bar,rn desc ;
Demo
thanks, kinda works when I add thelimit 1
at the end but is not getting the last in json array, is insertion order not warrantied?
– commonSenseCode
Nov 11 at 10:22
@commonSenseCode : check now.
– Kaushik Nayak
Nov 11 at 10:30
Some progress, so I tested inserting more values. Right now this is limiting the main row return (foo, bar, comments), I want it to limit to 1 json object inside the jsonarray incomments
, not to limit the rows.
– commonSenseCode
Nov 11 at 10:38
@commonSenseCode : It's basically the TOP 1 per group problem. You may useDISTINCT ON
. check edit. Please remember that when you ask a question, your sample data and expected output should reflect the complete requirement.
– Kaushik Nayak
Nov 11 at 11:37
Hi Kaushik this is way nearer to what I need, is there a wat to order DESC by field timestamp inside comments. Somehow sometimes it doesn't give the last added comment
– commonSenseCode
Nov 11 at 11:43
|
show 4 more comments
up vote
1
down vote
accepted
You may use jsonb_array_elements .. WITH ORDINALITY
to get the order
select foo, bar, j.comments
from
documents cross
join lateral jsonb_array_elements(comments) WITH ORDINALITY j(comments, rn)
WHERE
(j.comments ->> 'isUser'):: boolean is false
ORDER BY j.rn DESC LIMIT 1;
EDIT
I want it to limit to 1 json object inside the jsonarray in comments
select DISTINCT ON ( foo, bar) foo,bar,comments
FROM
( select d.foo,d.bar,j.comments,j.rn
from
documents d cross
join lateral jsonb_array_elements(comments) WITH ORDINALITY j(comments, rn)
WHERE
(j.comments ->> 'isUser'):: boolean is false
) s
ORDER BY foo,bar,rn desc ;
Demo
thanks, kinda works when I add thelimit 1
at the end but is not getting the last in json array, is insertion order not warrantied?
– commonSenseCode
Nov 11 at 10:22
@commonSenseCode : check now.
– Kaushik Nayak
Nov 11 at 10:30
Some progress, so I tested inserting more values. Right now this is limiting the main row return (foo, bar, comments), I want it to limit to 1 json object inside the jsonarray incomments
, not to limit the rows.
– commonSenseCode
Nov 11 at 10:38
@commonSenseCode : It's basically the TOP 1 per group problem. You may useDISTINCT ON
. check edit. Please remember that when you ask a question, your sample data and expected output should reflect the complete requirement.
– Kaushik Nayak
Nov 11 at 11:37
Hi Kaushik this is way nearer to what I need, is there a wat to order DESC by field timestamp inside comments. Somehow sometimes it doesn't give the last added comment
– commonSenseCode
Nov 11 at 11:43
|
show 4 more comments
up vote
1
down vote
accepted
up vote
1
down vote
accepted
You may use jsonb_array_elements .. WITH ORDINALITY
to get the order
select foo, bar, j.comments
from
documents cross
join lateral jsonb_array_elements(comments) WITH ORDINALITY j(comments, rn)
WHERE
(j.comments ->> 'isUser'):: boolean is false
ORDER BY j.rn DESC LIMIT 1;
EDIT
I want it to limit to 1 json object inside the jsonarray in comments
select DISTINCT ON ( foo, bar) foo,bar,comments
FROM
( select d.foo,d.bar,j.comments,j.rn
from
documents d cross
join lateral jsonb_array_elements(comments) WITH ORDINALITY j(comments, rn)
WHERE
(j.comments ->> 'isUser'):: boolean is false
) s
ORDER BY foo,bar,rn desc ;
Demo
You may use jsonb_array_elements .. WITH ORDINALITY
to get the order
select foo, bar, j.comments
from
documents cross
join lateral jsonb_array_elements(comments) WITH ORDINALITY j(comments, rn)
WHERE
(j.comments ->> 'isUser'):: boolean is false
ORDER BY j.rn DESC LIMIT 1;
EDIT
I want it to limit to 1 json object inside the jsonarray in comments
select DISTINCT ON ( foo, bar) foo,bar,comments
FROM
( select d.foo,d.bar,j.comments,j.rn
from
documents d cross
join lateral jsonb_array_elements(comments) WITH ORDINALITY j(comments, rn)
WHERE
(j.comments ->> 'isUser'):: boolean is false
) s
ORDER BY foo,bar,rn desc ;
Demo
edited Nov 11 at 11:37
answered Nov 11 at 10:14
Kaushik Nayak
16.8k41129
16.8k41129
thanks, kinda works when I add thelimit 1
at the end but is not getting the last in json array, is insertion order not warrantied?
– commonSenseCode
Nov 11 at 10:22
@commonSenseCode : check now.
– Kaushik Nayak
Nov 11 at 10:30
Some progress, so I tested inserting more values. Right now this is limiting the main row return (foo, bar, comments), I want it to limit to 1 json object inside the jsonarray incomments
, not to limit the rows.
– commonSenseCode
Nov 11 at 10:38
@commonSenseCode : It's basically the TOP 1 per group problem. You may useDISTINCT ON
. check edit. Please remember that when you ask a question, your sample data and expected output should reflect the complete requirement.
– Kaushik Nayak
Nov 11 at 11:37
Hi Kaushik this is way nearer to what I need, is there a wat to order DESC by field timestamp inside comments. Somehow sometimes it doesn't give the last added comment
– commonSenseCode
Nov 11 at 11:43
|
show 4 more comments
thanks, kinda works when I add thelimit 1
at the end but is not getting the last in json array, is insertion order not warrantied?
– commonSenseCode
Nov 11 at 10:22
@commonSenseCode : check now.
– Kaushik Nayak
Nov 11 at 10:30
Some progress, so I tested inserting more values. Right now this is limiting the main row return (foo, bar, comments), I want it to limit to 1 json object inside the jsonarray incomments
, not to limit the rows.
– commonSenseCode
Nov 11 at 10:38
@commonSenseCode : It's basically the TOP 1 per group problem. You may useDISTINCT ON
. check edit. Please remember that when you ask a question, your sample data and expected output should reflect the complete requirement.
– Kaushik Nayak
Nov 11 at 11:37
Hi Kaushik this is way nearer to what I need, is there a wat to order DESC by field timestamp inside comments. Somehow sometimes it doesn't give the last added comment
– commonSenseCode
Nov 11 at 11:43
thanks, kinda works when I add the
limit 1
at the end but is not getting the last in json array, is insertion order not warrantied?– commonSenseCode
Nov 11 at 10:22
thanks, kinda works when I add the
limit 1
at the end but is not getting the last in json array, is insertion order not warrantied?– commonSenseCode
Nov 11 at 10:22
@commonSenseCode : check now.
– Kaushik Nayak
Nov 11 at 10:30
@commonSenseCode : check now.
– Kaushik Nayak
Nov 11 at 10:30
Some progress, so I tested inserting more values. Right now this is limiting the main row return (foo, bar, comments), I want it to limit to 1 json object inside the jsonarray in
comments
, not to limit the rows.– commonSenseCode
Nov 11 at 10:38
Some progress, so I tested inserting more values. Right now this is limiting the main row return (foo, bar, comments), I want it to limit to 1 json object inside the jsonarray in
comments
, not to limit the rows.– commonSenseCode
Nov 11 at 10:38
@commonSenseCode : It's basically the TOP 1 per group problem. You may use
DISTINCT ON
. check edit. Please remember that when you ask a question, your sample data and expected output should reflect the complete requirement.– Kaushik Nayak
Nov 11 at 11:37
@commonSenseCode : It's basically the TOP 1 per group problem. You may use
DISTINCT ON
. check edit. Please remember that when you ask a question, your sample data and expected output should reflect the complete requirement.– Kaushik Nayak
Nov 11 at 11:37
Hi Kaushik this is way nearer to what I need, is there a wat to order DESC by field timestamp inside comments. Somehow sometimes it doesn't give the last added comment
– commonSenseCode
Nov 11 at 11:43
Hi Kaushik this is way nearer to what I need, is there a wat to order DESC by field timestamp inside comments. Somehow sometimes it doesn't give the last added comment
– commonSenseCode
Nov 11 at 11:43
|
show 4 more comments
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%2f53247482%2fselect-columns-and-in-a-jsonb-column-only-return-the-last-element-where-meets-co%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
Show us some sample of how the json actually looks like and what output you want to see from it.
– Kaushik Nayak
Nov 11 at 9:54