私はこれを20分間見つめていましたが、頭を包むことはできません. 以前にやったことがありますが、どのプロジェクトで覚えていないだけなので (コードを参照できます)。
私はそのようなテーブルを持っています:
votes [table]
id - serial , primary
useraccount_id - id
object_id - id
vote - int
timestamp_vote - timestamp
任意の 1 つのオブジェクトに対する現在の投票総数を選択できる必要があります。
ただし、このテーブルは「タイムライン」ビューとしても機能します。id 列としてシーケンスを使用していることに注意してください。useraccount_id + object_id の複数のレコードがある場合があります
残念ながら、これは私が必要とするものではありません:
SELECT
vote , count(vote)
FROM
votes
WHERE
object_id = 161
GROUP BY
vote ;
特定のユーザーによる最新の投票に制限するには、サブクエリと個別、および「タイムスタンプの順序による順序」を使用する必要があることを知っています。その SELECT をつなぎ合わせる方法を思い出せません。
-- サンプルデータの追加 --
サンプルデータ
id | object_id | useraccount_id | timestamp_created | vote
----+------------+----------------+----------------------------+------------
2 | 153 | 57 | 2012-12-11 18:37:20.421013 | 1
3 | 153 | 57 | 2012-12-11 18:48:39.963748 | 2
4 | 153 | 57 | 2012-12-11 18:48:42.869945 | 3
5 | 153 | 57 | 2012-12-11 18:48:48.991617 | 1
6 | 153 | 57 | 2012-12-11 19:34:26.701351 | 2
7 | 153 | 57 | 2012-12-11 19:35:52.449031 | 3
8 | 153 | 57 | 2012-12-11 19:35:52.986822 | 1
9 | 153 | 57 | 2012-12-11 19:35:53.850291 | 2
10 | 153 | 58 | 2012-12-11 19:35:55.884202 | 3
12 | 153 | 58 | 2012-12-11 19:35:56.803337 | 1
13 | 153 | 59 | 2012-12-11 19:37:04.563519 | 3
15 | 153 | 60 | 2012-12-11 19:37:40.618324 | 3
16 | 153 | 61 | 2012-12-11 19:37:40.618324 | 3
17 | 153 | 62 | 2012-12-11 19:37:40.618324 | 3
18 | 153 | 63 | 2012-12-11 19:37:40.618324 | 2
予想される出力は次のとおりです。
vote | count
-----+------
1 | 1 # user 58 cast a vote of `3` , then `1`. only the latest vote of `1` counted.
2 | 2 # user 57 switched votes many times. only their last vote of `2` counted. user 63 cast a vote of `2` as well.
3 | 4 # users 59,60,61,62 all voted `3`