我有一個名爲「friendbook_post」的表格,其中包含以下字段:text
,id
,type
,author
,date_time
。 表中有很多條目。如何獲取第n個最近值?
現在我想要取得作者身份證(作者)和日期的每個作者(如果存在)的第二篇文章(根據時間)。
我嘗試了許多查詢,但沒有任何幫助。
我有一個名爲「friendbook_post」的表格,其中包含以下字段:text
,id
,type
,author
,date_time
。 表中有很多條目。如何獲取第n個最近值?
現在我想要取得作者身份證(作者)和日期的每個作者(如果存在)的第二篇文章(根據時間)。
我嘗試了許多查詢,但沒有任何幫助。
您需要使用子查詢一起使用的解析函數(在這種情況下,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
代替。請注意,如果作者沒有第二篇文章,則上述查詢將不會爲該作者返回任何內容。
希望這會有所幫助。
謝謝我在查詢中稍作修改後得到了ans。實際上,分區應該根據「作者」來決定,因爲id是主鍵,並且只有一行與一個id相關聯,因此ans將始終爲空。 – 2014-11-01 05:16:04
我的歉意,我誤解了你的第一篇文章。我讀作者id(作者)是指名爲「id」的列而不是名爲「author」的列 – 2014-11-03 20:51:37
我修改了我的答案;你會接受嗎?謝謝。 – 2014-11-03 20:52:16
什麼是您的RDBMS:MySQL還是Oracle? – 2014-11-01 04:45:04
我的RDBMS是Oracle。 – 2014-11-01 04:47:24