
[英]Question: How do I write the command to find the customer who placed an order number 12345?
[英]How to find number of subscribers per question?
我正在嘗試查找每個問題的訂閱者數量。 這里的挑戰是用戶訂閱不止一次,但我只需要計算該用戶第一次訂閱的時間。 如果有人可以指導我,我還在學習。 我附上了我使用的表格和代碼的鏈接
select * , COUNT(GroupQuestionSubscriberId) NumberOfSubscriber
from [dbo].[ADF_GroupQuestionSubscribers]
where GroupQuestionId = 4654
GROUP BY [GroupQuestionSubscriberId], [GroupQuestionId], [UserID], [Status], [CreatedDt]
CreatedDt
列很可能包含每行數據的唯一值。 在您的group by
子句中包含該列將產生許多等於1
的計數。 為了使當前查詢產生2
個計數,您需要兩行具有完全相同的GroupQuestionSubscriberId
、 GroupQuestionId
、 UserID
、 Status
和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;
結果
GroupQuestionSubscriberId GroupQuestionId UserId Status CreatedDt NumberOfSubscribers
------------------------- --------------- ------ ---------- ----------------------- -------------------
8031 4654 32338 Subscribed 2021-01-19 15:41:25.970 3
8035 4654 32299 Subscribed 2021-01-19 15:55:14.123 3
8038 4654 32338 Subscribed 2021-01-19 16:00:27.343 3
8094 4654 32466 Subscribed 2021-01-20 06:42:50.323 3
小提琴以查看實際情況。
編輯:使用新的預期結果信息更新解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.