ユーザーの投稿を含むテーブルが 1 つあります。毎日、各ユーザーから 1 から最大 n までの投稿を表示する必要があります。
例:
post_id|user_id|post_datetime|post_text
1 |100 |2012-12-01 01:00:00|lorem ipsum 1
2 |100 |2012-12-01 02:00:00|lorem ipsum 2
3 |101 |2012-12-01 03:00:00|lorem ipsum 3
4 |100 |2012-12-01 04:00:00|lorem ipsum 4
5 |102 |2012-12-01 05:00:00|lorem ipsum 5
6 |100 |2012-12-02 03:00:00|lorem ipsum 6
7 |102 |2012-12-02 04:00:00|lorem ipsum 7
8 |101 |2012-12-02 05:00:00|lorem ipsum 8
9 |101 |2012-12-02 06:00:00|lorem ipsum 9
10 |101 |2012-12-02 07:00:00|lorem ipsum 10
たとえば、ユーザーごとに 1 日あたり最大 2 件の投稿を返すクエリが必要です。
post_id|user_id|post_datetime|post_text
2 |100 |2012-12-01 02:00:00|lorem ipsum 2
4 |100 |2012-12-01 04:00:00|lorem ipsum 4
3 |101 |2012-12-01 03:00:00|lorem ipsum 3
5 |102 |2012-12-01 05:00:00|lorem ipsum 5
6 |100 |2012-12-02 03:00:00|lorem ipsum 6
7 |102 |2012-12-02 04:00:00|lorem ipsum 7
9 |101 |2012-12-02 06:00:00|lorem ipsum 9
10 |101 |2012-12-02 07:00:00|lorem ipsum 10
GROUP と HAVING を試してみましたが、各ユーザーの 1 日あたりの上位 n レコードではなく、上位 n レコードのみを取得します。
SELECT a.* FROM posts AS a
JOIN posts AS a2
ON a.user_id = a2.user_id AND a.post_datetime <= a2.post_datetime
GROUP BY a.post_id
HAVING COUNT(*) <= 3
ORDER BY a.post_id, a.post_datetime DESC