2011-05-11 185 views
0

我有一個查詢,列出所有帖子兩行:限制查詢結果以每

SELECT *, DATE(FROM_UNIXTIME(`timestamp`)) `date` 
FROM `posts` 
ORDER BY `date` DESC 

查詢列表中的所有行,我想只顯示最後2個職位每個date,我怎麼能做到這一點?

+1

您是否正在按日期對結果進行分組?你的問題不是很清楚 - 你能澄清嗎? 「在每個日期後顯示示例2」是什麼意思? – MikeMurko 2011-05-11 22:45:20

+0

不,用給定的查詢,如果我在2011-05-11有10個帖子,他們都列出結果,但我只想要2個帖子顯示結果 – 2011-05-11 22:47:21

+1

你想要顯示哪兩個日期? – soandos 2011-05-11 22:47:47

回答

4

這可能會實現,但我不能說太多關於它的性能...

SELECT DATE(FROM_UNIXTIME(MyTimestamp)) AS ForDate, * 
FROM MyPostsTable 
WHERE 2 >= 
(
    SELECT COUNT(*) 
    FROM MyPostsTable AS lookup 
    WHERE DATE(FROM_UNIXTIME(lookup.MyTimestamp)) = DATE(FROM_UNIXTIME(MyPostsTable.MyTimestamp)) 
    AND lookup.MyTimeStamp >= MyPostsTable.MyTimestamp 
) 
+0

謝謝,我測試了它,但它又返回所有行的列表:( – 2011-05-11 22:56:04

+0

有錯字,你可能會發現它每天排除一行。 <='已改爲'2> =' – MatBailie 2011-05-11 23:08:10

+0

謝謝,現在我的問題解決了!謝謝 – 2011-05-11 23:11:11

0

我適應一個SQL Server/Oracle解決方案,以你的世界。其他列將是表的ID,然後您可以在相關子查詢中使用該列來獲取其餘列。讓我知道它是否適用於下次我使用MySQL

select l.DATE(FROM_UNIXTIME(`timestamp`)), l.`otherColumn`, count(*) as num 
from `posts` as l 
left outer join fruits as r 
    on l.DATE(FROM_UNIXTIME(`timestamp`)) = r.DATE(FROM_UNIXTIME(`timestamp`))   
     and l.`otherColumn` >= r.`otherColumn` 
group by l.DATE(FROM_UNIXTIME(`timestamp`)), l.`otherColumn` 
having count(*) <= 2 
+0

看起來和我的答案一樣,但表達方式不同,所以看起來應該起作用。儘管如此,或者他們甚至給出了相同的執行計劃。 – MatBailie 2011-05-12 08:49:42