結果セット内で増分カウンタを取得しようとしています。例えばグループ内でのカウントの増分By
、私はmessages
テーブルを持っていると仮定します。専用の内
+---------+------------+-------------+---------+
| user_id | message_id | sent_at | counter |
+---------+------------+-------------+---------+
| 1 | 1 | 2017-01-01 | 1 |
| 1 | 3 | 2017-01-15 | 2 |
| 1 | 4 | 2017-01-22 | 3 |
| 2 | 2 | 2017-01-06 | 1 |
| 2 | 6 | 2017-01-22 | 2 |
| 3 | 5 | 2017-01-22 | 1 |
| 3 | 7 | 2017-01-28 | 2 |
| 3 | 8 | 2017-02-03 | 3 |
| 3 | 9 | 2017-02-14 | 4 |
+---------+------------+-------------+---------+
基本的に、カウンタが増加:
messages
--------
- id (int)
- user_id (int)
- sent_at (date)
- body (text)
私は私がこのような結果得られたクエリを実行したいのですがuser_id
グループ、および各内部グループはsent_at
列で並べ替えられます。
私は簡単に以下のSQLで最初の3つの列を得ることができることを知っている:
SELECT
user_id,
id AS message_id,
sent_at
FROM messages
ORDER BY
user_id,
sent_at
しかし、私はその第四count
列を必要としているんです。
私は結果の行数を取得するためにROW_NUMBER()
を使用できることを知っている:
SELECT
user_id,
id AS message_id,
sent_at,
ROW_NUMBER() OVER(ORDER BY user_id, sent_at) AS counter
FROM messages
ORDER BY
user_id,
sent_at
をしかし、それは私に次のような結果与える:私はそれぞれの新しい後に何らかの形でカウンターをリセットすることができれば
+---------+------------+-------------+---------+
| user_id | message_id | sent_at | counter |
+---------+------------+-------------+---------+
| 1 | 1 | 2017-01-01 | 1 |
| 1 | 3 | 2017-01-15 | 2 |
| 1 | 4 | 2017-01-22 | 3 |
| 2 | 2 | 2017-01-06 | 4 |
| 2 | 6 | 2017-01-22 | 5 |
| 3 | 5 | 2017-01-22 | 6 |
| 3 | 7 | 2017-01-28 | 7 |
| 3 | 8 | 2017-02-03 | 8 |
| 3 | 9 | 2017-02-14 | 9 |
+---------+------------+-------------+---------+
をuser_id
、私は私が探している結果を得るだろう。あなたは、単にPARTITION BY
を使用する必要が
パーフェクト、感謝を! –