2016-03-21 65 views
0

所以我有一個問題,我試圖解決幾個星期,但我沒有來解決任何問題。因此,這裏是我努力讓自己在查詢表: TablesPostgresql查詢問題

我明明加入了他們(易):

SELECT a.date,b.title,b.author,u.nick 
FROM book_add a 
INNER JOIN user u on(a.user_fk=u.id) 
INNER JOIN book b on (a.book_fk=b.id) 
INNER JOIN status s ON(a.status_fk=s.id) 
WHERE s.description='active'; 

現在,這裏是問題:我想對行進行排序日期desc並區分它們,以便最後插入的行(具有最新日期)第一行是。但一旦得到區分,結果是非常奇怪的。我嘗試這樣做:

SELECT a.date,b.title,b.author,u.nick 
FROM book_add a 
INNER JOIN user u on(a.user_fk=u.id) 
INNER JOIN book b on (a.book_fk=b.id) 
INNER JOIN status s ON(a.status_fk=s.id) 
WHERE s.description='active' ORDER BY a.date DESC; 

這個工程,但一旦我嘗試distinctig a.book_fk結果是錯誤的:

SELECT DISTINCT ON(a.book_fk)a.book_fk,a.date,b.title,b.author,u.nick 
FROM book_add a 
INNER JOIN user u on(a.user_fk=u.id) 
INNER JOIN book b on (a.book_fk=b.id) 
INNER JOIN status s ON(a.status_fk=s.id) 
WHERE s.description='active' ORDER BY a.date DESC; 

我甚至這樣一個嘗試的辦法,但都沒有成功:

SELECT * FROM (SELECT DISTINCT 
ON(a.book_fk)a.book_fk,a.date,b.title,b.author,u.nick 
FROM book_add a 
INNER JOIN user u on(a.user_fk=u.id) 
INNER JOIN book b on (a.book_fk=b.id) 
INNER JOIN status s ON(a.status_fk=s.id) 
WHERE s.description='active') res ORDER BY res.date DESC 

有人可以幫我嗎?我會非常高興!謝謝!

+0

對不起,某些列名錯誤 – Nano

+0

在這裏,請參閱樣式並再次編輯。 –

+0

非常感謝! – Nano

回答

0

這聽起來像是你想要獲得每本書的一行,最近的用戶/狀態?在這種情況下,這應該工作:

SELECT DISTINCT ON(a.book_fk) 
     a.book_fk, a.date, b.title, b.author, u.nick 
FROM book_add a 
INNER JOIN user u on(a.user_fk=u.id) 
INNER JOIN book b on (a.book_fk=b.id) 
INNER JOIN status s ON(a.status_fk=s.id) 
WHERE s.description='active' 
ORDER BY a.book_fk, a.date DESC 
; 
+0

感謝您的回覆。這就是我想要達到的目標,但不知怎麼的,從中挑選的日期讓我們說3本相同的書並不是最新的,並且由於它的小細節,它沒有正確地排序 – Nano