Ограничить результаты запроса до двух строк на группу - PullRequest
0 голосов
/ 12 мая 2011

У меня есть запрос, чтобы перечислить все сообщения:

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

В списке запросов все строки, я хочу показать только последние 2 сообщения для каждого date, как я могу это сделать?

Ответы [ 2 ]

4 голосов
/ 12 мая 2011

Это может сработать, хотя я не могу много сказать о его производительности ...

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 голосов
/ 12 мая 2011

Я адаптирую решение sql server / oracle для вашего мира.Другой столбец будет идентификатором таблицы, и затем вы сможете использовать его в коррелированном подзапросе, чтобы получить остальные столбцы.Дайте мне знать, если это работает в следующий раз, когда я использую 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...