2014-11-01 113 views
0

我有一個名爲「friendbook_post」的表格,其中包含以下字段:text,id,type,author,date_time。 表中有很多條目。如何獲取第n個最近值?

現在我想要取得作者身份證(作者)和日期的每個作者(如果存在)的第二篇文章(根據時間)。

我嘗試了許多查詢,但沒有任何幫助。

+0

什麼是您的RDBMS:MySQL還是Oracle? – 2014-11-01 04:45:04

+0

我的RDBMS是Oracle。 – 2014-11-01 04:47:24

回答

2

您需要使用子查詢一起使用的解析函數(在這種情況下,ROW_NUMBER()):

SELECT * FROM (
    SELECT text, id, type, author, date_time, ROW_NUMBER() OVER (PARTITION BY author ORDER BY date_time DESC) AS the_post_num 
     FROM friendbook_post 
) WHERE the_post_num = 2 

這會給第二個最新的帖子(2日最近的)。如果你想獲得第二個最老的帖子,那麼ORDER BY date_time ASC。並且2可以用任何n代替。請注意,如果作者沒有第二篇文章,則上述查詢將不會爲該作者返回任何內容。

希望這會有所幫助。

+0

謝謝我在查詢中稍作修改後得到了ans。實際上,分區應該根據「作者」來決定,因爲id是主鍵,並且只有一行與一個id相關聯,因此ans將始終爲空。 – 2014-11-01 05:16:04

+0

我的歉意,我誤解了你的第一篇文章。我讀作者id(作者)是指名爲「id」的列而不是名爲「author」的列 – 2014-11-03 20:51:37

+0

我修改了我的答案;你會接受嗎?謝謝。 – 2014-11-03 20:52:16