【问题标题】:group by category to show difference by month in SQL按类别分组以在 SQL 中按月显示差异
【发布时间】:2021-05-13 08:08:34
【问题描述】:

我有一个视图,可以显示每个月每个班级的成员总数,但是我想通过在单独的列中减去上个月的 total_count 和当前月份来显示增长。例如,我想查看附图中提到的数据。在这张表上,您可以看到 12 月份会员级别“医生”的总数为 5,但 1 月份为 4,所以当我在 2 月份查看这份报告时,我希望有一个单独的列,名为“增长” " 这将从 12 月的总成员类别中减去 1 月份的总成员类别并显示增长。当我们移到 3 月时,它将通过用 1 月减去 2 月的总成员类别来做同样的事情,并在增长列中显示差异。任何有关如何通过查询实现它的帮助将不胜感激。我正在使用 MS SQL。

【问题讨论】:

  • 如果您使用的是受支持的 SQL Server 版本,这将是微不足道的。

标签: sql sql-server sql-server-2008


【解决方案1】:

正如我所提到的,如果您使用的是受支持的 SQL Server 版本(2008 已经完全不受支持 18~ 个月),这将非常简单:

SELECT JoinedDate,
       MembershipClass,
       TotalCount,
       TotalCount - LAG(TotalCount) OVER (PARTITION BY MembershipClass ORDER BY JoinedDate ASC) AS Growth
FROM dbo.YourTable;

相反,您需要使用ROW_NUMBER 和自联接,这将大大降低性能:

WITH RNs AS(
    SELECT JoinedDate,
           MembershipClass,
           TotalCount,
           ROW_NUMBER() OVER (PARTITION BY MembershipClass ORDER BY JoinedDate ASC) AS RN
    FROM dbo.YourTable)
SELECT RN1.JoinedDate,
       RN1.MembershipClass,
       RN1.TotalCount,
       RN1.TotalCount - RN2.TotalCount AS Growth
FROM RNs RN1
     LEFT JOIN RNs RN2 ON RN1.MembershipClass = RN2.MembershipClass
                      AND RN1.RN = RN2.RN + 1;

【讨论】:

  • 非常感谢,我会试一试告诉你的。
  • 非常感谢,我已经使用第一个脚本来提供数据,一切看起来都很完美。谢谢。
  • 如果第一个脚本有效,@BiswanathDas,您不能在标记时使用 SQL Server 2008...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 2021-04-13
相关资源
最近更新 更多