我想爲特定用戶選擇所有線程主題,但我想通過最近發送的消息以最近的線程進行排序。這是我的數據庫模式。窗口函數,試圖通過created_at從連接表中的列進行排序而不進行分組
create table thread (
id bigserial primary key,
subject text not null,
created timestamp with time zone not null default current_timestamp
);
create table thread_account (
account bigint not null references account(id) on delete cascade,
thread bigint not null references thread(id) on delete cascade
);
create index thread_account_account on thread_account(account);
create index thread_account_thread on thread_account(thread);
create table message (
id bigserial primary key,
thread bigint not null references thread(id) on delete cascade,
content text not null,
account bigint not null references account(id) on delete cascade,
created timestamp with time zone not null default current_timestamp
);
create index message_account on message(account);
create index message_thread on message(thread);
然後我在做一個查詢像
select *
FROM thread_account
JOIN thread on thread.id = thread_account.thread
JOIN message on message.thread = thread_account.thread
WHERE thread_account.account = 299
ORDER BY message.created desc;
但這只是還給所有線程科目那裏是一個信息的每個條目的列表。 (JOIN消息message.thread = thread_account.thread)似乎是問題。我被告知我需要一個窗口函數,但似乎無法找出它們。這是Postgres的方式。
我不理解你的問題,請進一步解釋,或寫你想 – Monty
比較遺憾的是什麼輸出。所以我有5個線程,線程只有id,創建和主題列。但我想按照最近發送的消息的順序返回線程。 IE message.created而不是thread.created。消息通過thread_account連接到線程。 我只會介紹按照最近消息的順序返回的5個線程。但我目前正在返回1000個條目(每個消息在整個數據庫中都有一個)。 這有道理嗎? – elcapitan
正在處理您的查詢。 – Monty