如何找到每个问题的订阅者数量?

时间:2021-01-25 18:56:17

标签: tsql

我正在尝试查找每个问题的订阅者数量。这里的挑战是用户订阅了不止一次,但我只需要计算该用户第一次订阅的时间。如果有人可以指导我,我仍在学习。我附上了我使用过的表格和代码的链接

query results

select * , COUNT(GroupQuestionSubscriberId) NumberOfSubscriber
from [dbo].[ADF_GroupQuestionSubscribers]
where GroupQuestionId = 4654
GROUP BY [GroupQuestionSubscriberId], [GroupQuestionId], [UserID], [Status], [CreatedDt]

1 个答案:

答案 0 :(得分:0)

CreatedDt 列很可能包含每一行数据的唯一值。在您的 group by 子句中包含该列将产生许多等于 1 的计数。为了使您当前的查询产生 2 的计数,您需要两行具有完全相同的 GroupQuestionSubscriberIdGroupQuestionIdUserIDStatus 和 {{ 1}}。如果所有这些都没有多少意义,那么我建议您通过阅读 the documention 来复习您的 CreatedDt 知识。

如果打算在可用数据旁边显示该计数,则使用 group by 是一种可能的解决方案。

示例数据

cross apply

解决方案

create table ADF_GroupQuestionSubscribers
(
  GroupQuestionSubscriberId int,
  GroupQuestionId int,
  UserId int,
  Status nvarchar(10),
  CreatedDt datetime
);

insert into ADF_GroupQuestionSubscribers (GroupQuestionSubscriberId, GroupQuestionId, UserId, Status, CreatedDt) values
(8031, 4654, 32338, 'Subscribed', '2021-01-19 15:41:25.970'),
(8035, 4654, 32299, 'Subscribed', '2021-01-19 15:55:14.123'),
(8038, 4654, 32338, 'Subscribed', '2021-01-19 16:00:27.343'),
(8094, 4654, 32466, 'Subscribed', '2021-01-20 06:42:50.323');

结果

select gqs.*,
       c.NumberOfSubscribers
from ADF_GroupQuestionSubscribers gqs
cross apply ( select count(distinct gqsc.UserId) as NumberOfSubscribers
              from ADF_GroupQuestionSubscribers gqsc
              where gqsc.GroupQuestionId = gqs.GroupQuestionId ) c
where gqs.GroupQuestionId = 4654;

Fiddle 查看实际情况。

编辑:使用新的预期结果信息更新解决方案。