1

ユーザーが作成したタグを追跡するテーブルがあります。この質問の重要な列は、user_id (誰がタグを作成したか) と created_at だと思います。

いくつかの検索で、date_trunc を使用して created_at を 1 日だけに変換し、それによってグループ化できるようにする方法を見つけました。

ただし、これを取得して 1 日の合計タグ数を取得することしかできません。私がやりたいのは、ユーザーと日の両方でグループ化することです。これにより、各ユーザーが毎日作成したタグの数を確認でき、順序付けを行うことで、ユーザーが 1 日に作成したタグの最大数を把握できます。

私はpostgres 9.1.6を使用しています。

何か助けはありますか?前もって感謝します。

編集:私が始めたのは、主に暗闇の中でのショットです:

select user_id,
       date_trunc('day', created_at) as "Day",
       count(*) as "numtags"
  from tags
  group by user_id, created_at
  order by numtags desc;

結果は次のとおりです。

 user_id |         Day         | numtags 
---------+---------------------+---------
      1  | 2012-01-08 00:00:00 |    5719
      1  | 2012-01-31 00:00:00 |    3239
      1  | 2011-12-01 00:00:00 |    1868
      1  | 2011-12-01 00:00:00 |    1772
      1  | 2011-12-01 00:00:00 |    1756

したがって、グループ化が意図したとおりに機能していないことは明らかです。ユーザー ID はすべて同じです (手動で確認したところ、そうであってはなりません)。

次のようなものを見たいと思います(上記の数字は一致しません。単なる例です):

 user_id |         Day         | numtags 
---------+---------------------+---------
      1  | 2012-01-08 00:00:00 |    100
      4  | 2012-01-31 00:00:00 |    90
      1  | 2011-12-12 00:00:00 |    80
      2  | 2011-12-12 00:00:00 |    77
      2  | 2011-12-13 00:00:00 |    76

つまり、同じユーザーが何度も表示され、同じ日付が何度も表示されます。実際、ユーザーが 1 日に少なくとも 1 つのタグを作成している限り、すべての user_id/Day の組み合わせが (それぞれ 1 回) 表示され、numtags はその方法を示します。その日はそのユーザーによって多くのタグが作成されました。

4

1 に答える 1

2

私が提案したように:

select user_id,
   created_at::date as "Day",
   count(*) as "numtags"
from tags
group by user_id, created_at::date
order by numtags desc;

created_at :: dateは、タイムスタンプを日付型にキャストしています。

あなたの間違いは、異なる時間部分のタイムスタンプであるcreatedateでグループ化することでしたが、結果としてタイムスタンプが切り捨てられました。

于 2012-11-09T17:37:42.047 に答える