Skip to content

Instantly share code, notes, and snippets.

@ikzekly
Last active December 7, 2018 23:57
Show Gist options
  • Save ikzekly/1d24f8447ab993cbd2a0f4023e04ccbd to your computer and use it in GitHub Desktop.
Save ikzekly/1d24f8447ab993cbd2a0f4023e04ccbd to your computer and use it in GitHub Desktop.
WITH messages_ranks AS (
SELECT *,
rank() OVER ( PARTITION BY channel_id ORDER BY created_at DESC) AS rank
FROM messages
)
SELECT row_to_json(t)
FROM (
SELECT channels.id,
channels.name,
channels.owner_id,
(
SELECT array_to_json(array_agg(row_to_json(messages_arr)))
FROM (
SELECT
messages_ranks.id,
messages_ranks.user_id,
messages_ranks.channel_id,
messages_ranks.text,
messages_ranks.created_at
FROM users
LEFT JOIN memberships
ON users.id = memberships.user_id
LEFT JOIN channels
ON channels.id = memberships.channel_id
LEFT JOIN messages_ranks
ON messages_ranks.channel_id = channels.id
WHERE users.id = 'b741c187-d7f5-42a0-ad8f-0eb038a1b2c8'
AND messages_ranks.rank <= 3
ORDER BY messages_ranks.created_at DESC
) messages_arr
) as messages
FROM channels
) t;
/* responce:
{
"id":"71aeb67e-1c72-435b-a9f8-c20d589aa917",
"name":"whatever",
"owner_id":"86c9df47-5c77-4939-bb90-0a6fca8cb4a3",
"messages":[
{
"id":"2bf6663f-a4a7-486e-a70a-e190eb2741d9",
"user_id":"b741c187-d7f5-42a0-ad8f-0eb038a1b2c8",
"channel_id":"73bd49d5-e8d1-477f-b10f-e9a51723bb6c",
"text":"whatever",
"created_at":"2018-12-07T23:34:37.577097"
},
...
{
"id":"0e69d185-472c-4ccb-9d3b-43b0b5c08e0b",
"user_id":"86c9df47-5c77-4939-bb90-0a6fca8cb4a3",
"channel_id":"3dc810e5-4e11-4447-847c-e41af8b0214c",
"text":"whatever",
"created_at":"2018-12-05T20:59:57.850526"
}
]
}
*/
@ikzekly
Copy link
Author

ikzekly commented Dec 7, 2018

👻

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment