我不知道从哪里开始。我正在开发一个论坛,需要一系列热门话题。这种方式的工作方式是我需要一个主题列表,并按特定日期时间内回复该主题的消息数量排序。但只有唯一的消息(因此,如果用户回复主题100次,而另一个主题有2个回复2个不同的用户ID,则第二个更高)
我想它需要检索主题,然后对链接到由消息的用户ID分组的主题id的消息进行计数(因此,如果用户回复100次主题,它只计为1),然后排序按此计算的主题。
以下是表格所需的内容
@lastvisit
将包含DateTime
,因此该主题的所有消息都在此日期时间之后。所以我现在可以称之为日期时间 - 2小时将成为过去2小时的热门话题
Topics
表
TopicId
TopicTitle
Active (has to be active = True)
Messages
表
TopicId
MessageCreationDate
UserId
Active (has to be active = 1)
不知道从哪里开始,我需要学习的是SQL
根据lc的回答,我提出了这个基础
SELECT
T.TopicTitle, T.TopicId, UniqueUserCount
FROM
Topics AS T
OUTER APPLY
(SELECT
COUNT(distinct M.UserId) as UniqueUserCount, M.TopicId
FROM
Messages AS M
WHERE
M.TopicId = T.TopicId
GROUP BY M.TopicId) AS m
GROUP BY
T.TopicId, TopicTitle, UniqueUserCount
ORDER BY
UniqueUserCount DESC
答案 0 :(得分:2)
您正在寻找COUNT DISTINCT
。这将仅计算相关列的不同(唯一)值。因此,您将按主题分组并计算不同的用户。
在您的示例中,此查询:
select count(distinct UserId) as UniqueUserCount, TopicId
from Messages
group by TopicId
其中主题13有来自单个用户的100条消息,而主题42有来自2个用户的1条消息,将返回如下结果:
UniqueUserCount | TopicId 1 | 13 2 | 42