为一年创建动态SQL语句

问题描述 投票:1回答:2

我想刚做好订阅数量每月结束订阅的数量在2018年比较,并结合到这一个表。

与x轴是2018个(所以一月,二月,等等)和y轴作为第一排我的第一个sql查询=次数用完了当月订阅。第二行是我的第二个sql查询=当月新做的订阅数。我的“查询”下有作为2018年三月的例子。

SELECT    
    COUNT (UserId)
FROM
    UserInAppPurchase 
WHERE 
    ValidTo > '2018-03-01' AND ValidTo < '2018-03-31' 
GROUP BY
    UserId

SELECT COUNT(UserId)
FROM UserInAppPurchase 
WHERE PurchaseDate > '2018-03-01' 
  AND PurchaseDate < '2018-03-31' 
GROUP BY UserId

非常感谢您的帮助

sql sql-server
2个回答
1
投票

如果我的理解是正确的,上面的查询将返回多行单月,这将依赖于独特的用户订货总数。然后,每个月和每个用户在两个垂直,上述图形将是一个3D图形,我不认为这里的情况。所以,取而代之的是,我能想到的2例,

  1. 你想订阅的总人数每月到期每月 SELECT MONTH(ValidTo) ExpireMonth, COUNT(UserId) ExpireCount FROM UserInAppPurchase WHERE YEAR(ValidTo) = 2018 GROUP BY MONTH(ValidTo);
  2. 你想知道如果用户的至少一个订阅已经过期的数量 WITH UniqueUsers AS ( SELECT DISTINCT MONTH(ValidTo) ExpireMonth, UserId FROM UserInAppPurchase WHERE YEAR(ValidTo) = 2018 ) SELECT ExpireMonth, COUNT(UserId) UserCount FROM UniqueUsers GROUP BY ExpireMonth;

类似的查询将是购买的订阅也。

请让我知道,如果你需要的是不同的。


1
投票

如果你希望用户ID的计数你不应该组由用户ID

SELECT    COUNT (UserId), 'valid_to'
FROM      UserInAppPurchase WHERE ValidTo>'2018-03-01' and  ValidTo<'2018-03-31' 
union  all  
SELECT    COUNT (UserId), 'PurchaseDate'
FROM      UserInAppPurchase WHERE PurchaseDate>'2018-03-01' and PurchaseDate<'2018-03-31'
© www.soinside.com 2019 - 2024. All rights reserved.