2016-03-21 11 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'; 

は、今ここでの問題は来る:私が使用した行を注文したいです最初の行が最後に挿入された行(最新の日付を持つ)になるようにします。しかし、一度区別されると結果は非常に奇妙です。私はこれを試してみました:

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

最新のユーザー/ステータスの書籍1行を取得しようとしているようですが、その場合、これは動作するはずです:

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