1

ユーザーのすべての能力を格納するテーブルがあるので、クエリで行うことは、ActiveRecord または Postgresql の生の SQL を使用して、毎日最大 2 つのランダム レコードのリストを取得することですか?

id   use_id   available_date
----------------------------
1    1        2013-01-01
2    1        2013-01-02
3    1        2013-01-03
4    2        2013-01-01
5    2        2013-01-02
6    3        2013-01-01
7    3        2013-01-03

予想される出力は、ハッシュまたは SQL レコードのいずれかです。

{
  "2013-01-01": [1, 2], # random top 2 user_ids, it also could be [1, 3], or [2, 3]
  "2013-01-02": [1, 2],
  "2013-01-03": [1, 3]
}

id   use_id   available_date
----------------------------
1    1        2013-01-01
4    2        2013-01-01
2    1        2013-01-02
5    2        2013-01-02
3    1        2013-01-03
7    3        2013-01-03
4

1 に答える 1

0

row_number() ウィンドウ関数を使用できます。

with cte as (
     select
         available_date, use_id,
         row_number() over(partition by available_date order by random()) as rn
     from Table1
)
select
    available_date, array_agg(use_id) 
from cte
where rn <= 2
group by available_date

sql fiddle demo

于 2013-09-29T13:56:00.057 に答える