SQL.Количество прошлых экземпляров в добавленной таблице - PullRequest
0 голосов
/ 27 ноября 2018

Это мой желаемый вывод:

CampaignName    CampaignDate    UsersTargeted   CountOfUsersBought   
    2x1          2018-11-24           1 (UserId 2)     1 (UserId 2)
    3x2          2018-11-25           2 (Both)         1 (UserId 1)

'CountOfUsersBought' Я хочу, чтобы он был среди всех целевых пользователей.

И таблица (обновляемая ежедневно), откуда я получаю данныезаполнить предыдущий вывод имеет следующую структуру:

UserId     EligibleForOffer(0,1)    BoughtToday(0,1)     Timestamp
   1                0                   0               2018-11-24
   1                1                   0               2018-11-25
   1                1                   1               2018-11-26
   1                0                   0               2018-11-27
   2                1                   0               2018-11-24
   2                1                   1               2018-11-25
   2                1                   0               2018-11-26
   2                0                   1               2018-11-27

Я хочу сохранить в переменной 'CountOfUsersBought' количество всех пользователей, которые фактически купили, не только сегодня, но и за все время.Как бы вы поступили с этим запросом?

Обратите внимание, что пользователи также покупают без предложения, поэтому я хочу подсчитать только прошлые экземпляры.Я знаю, что для другой таблицы пользователей, на которых нацелена каждая кампания, я просто хочу, чтобы количество пользователей, принявших данное им предложение, превысило «сегодня».

1 Ответ

0 голосов
/ 27 ноября 2018

Вы можете GROUP BY даты и использовать SUM узнать, сколько пользователей имеют право на кампании и использовать CASE для выполнения ваших условий.А бонус MIN позволяет определить, для какого конкретного пользователя, связанного с этим условием, соответствует только один пользователь.

CREATE TABLE Campain
(
     UserId INT
    ,EligibleForOffer   BIT
    ,BoughtToday        BIT
    ,Timestamp          DATE
)

INSERT INTO Campain
VALUES
 (1,0,0,'2018-11-24')
,(1,1,0,'2018-11-25')
,(1,1,1,'2018-11-26')
,(1,0,0,'2018-11-27')
,(2,1,0,'2018-11-24')
,(2,1,1,'2018-11-25')
,(2,1,0,'2018-11-26')
,(2,0,1,'2018-11-27')

SELECT   Timestamp
        ,SUM(CAST(EligibleForOffer AS INT)) NumberOfUsersTargeted
        ,CASE WHEN SUM(CAST(EligibleForOffer AS INT))=1 THEN 'UserId-'+CAST(MIN(UserId) AS VARCHAR) WHEN SUM(CAST(EligibleForOffer AS INT))>1 THEN 'Multiple Users(Both)' ELSE 'No Target' END UsersTargetedDetail
        ,SUM(CAST(BoughtToday AS INT)) NumberOfBought
        ,CASE WHEN SUM(CAST(BoughtToday AS INT))=1 THEN 'UserId-'+CAST(MIN(UserId) AS VARCHAR) WHEN SUM(CAST(BoughtToday AS INT))>1 THEN 'Multiple Users(Both)' ELSE 'No Buying' END BoughtDetail
FROM Campain
GROUP BY Timestamp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...