我正在尝试查找每个问题的订阅者数量。这里的挑战是用户订阅了不止一次,但我只需要计算该用户第一次订阅的时间。如果有人可以指导我,我仍在学习。我附上了我使用过的表格和代码的链接
select * , COUNT(GroupQuestionSubscriberId) NumberOfSubscriber
from [dbo].[ADF_GroupQuestionSubscribers]
where GroupQuestionId = 4654
GROUP BY [GroupQuestionSubscriberId], [GroupQuestionId], [UserID], [Status], [CreatedDt]
答案 0 :(得分:0)
CreatedDt
列很可能包含每一行数据的唯一值。在您的 group by
子句中包含该列将产生许多等于 1
的计数。为了使您当前的查询产生 2
的计数,您需要两行具有完全相同的 GroupQuestionSubscriberId
、GroupQuestionId
、UserID
、Status
和 {{ 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 查看实际情况。
编辑:使用新的预期结果信息更新解决方案。