1日の有効返信数の数え方
返信テーブルあり
フィールド
著者ID、投稿時間
11 08-01-01 15:00
12 08 -01 -01 16:00
13 08-01-01 17:00
12 08-01-01 18:00
12 08-01-02 16:00
有効な返信をカウントしたいと思います
24 時間以内に同じ人からの返信は有効な返信とみなされます
計算された返信数は
11 (1 回)
12 (2 回)、そのうちの 1 つは 24 時間以内に応答した人は除外されます
13 (1 回)
利用できるより良いアルゴリズムはありますか? まず配列に保存し、常に走査して比較します。配列が面倒です
ありがとう、エビ
-----解決策----------- --------
有効期限は24時間に1回と規定しているのに、他に何をカウントしているのでしょうか? ? ?
時間を使用して減算を行うか (投稿時間で並べ替え、TOP2 を使用して最後の 2 つの値を取り出して比較します。トラバーサルとは何の関係もありません)、存在する場合は ID を 24 時間ロックします。返事です
------解決策---------
SELECT *,count(DISTINCT(投稿時刻の最初の8桁)) AS 回 FROM テーブル GROUP BY id <br><font color="#e78608">------解決策---------</font><br>テーブルから著者 ID、投稿時刻を選択<br> a<br>WHERE (NOT EXISTS<br> (SELECT 著者 ID<br> FROM テーブル b<br> WHERE b. 著者 ID = a. 著者 ID AND b. 投稿時間 > a. 投稿時間) )<br> ORDER BY 著者ID、投稿時間 DESC <br><font color="#e78608">------解決策---------</font><br>
declare @t table([著者ID] int,[投稿時刻] datetime) @tに挿入 選択 11、'08-01-01 15:00 ' 結合 選択 12、'08-01-01 16:00 ' 結合 選択 13、'08-01-01 17:00 ' 結合 選択 12、'08-01-01 18:00 ' 結合 12、'08-01-02 16:00 ' を選択してください select id,count(*)as [投稿数] from ( [著者 ID] による @t グループの ID として [著者 ID] を選択し、 CONVERT (varchar(10),[投稿時刻],120)) T.id による T グループ <br><font color="#e78608">------解決策---------</font><br>テーブルから cnt,ID として count(ID) を選択しますここで、 str_date="xxxx-xx-xx" は ID 順にグループ化され、cnt 順に並べられます。 <br><font color="#e78608">------解決策---------</font><br>テーブルから著者 ID、投稿時刻を選択 <br> a <br>WHERE (NOT EXISTS <br> (SELECT 著者 ID <br> FROM テーブル b <br> WHERE b. 著者 ID = a. 著者 ID AND b. 投稿時間 > a. 投稿時間) ) <br> ORDER BY 著者 ID、投稿時刻 DESC <div class="clear"></div>