按类别分组以在 SQL 中按月显示差异
group by category to show difference by month in SQL
我有一个视图,每个 class 每个月的成员总数但是我想通过减去前一个月的 total_count 来显示增长一个单独的列。例如,我想查看附图中提到的数据。在这里 table,您可以看到会员 class“医生”在 12 月份的总数是 5,但在 1 月份是 4,所以当我在 2 月份查看这份报告时,我想有一个名为“增长”的单独列,它将从 12 月的总成员 class 中减去 1 月的总成员 class 并显示增长。当我们移动到三月时,它会通过用一月减去二月的总成员 class 来做同样的事情,并在增长列中显示差异。任何有关如何通过查询实现它的帮助将不胜感激。我正在使用 MS SQL.
正如我提到的,如果您使用的是 SQL 服务器的受支持版本(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;
我有一个视图,每个 class 每个月的成员总数但是我想通过减去前一个月的 total_count 来显示增长一个单独的列。例如,我想查看附图中提到的数据。在这里 table,您可以看到会员 class“医生”在 12 月份的总数是 5,但在 1 月份是 4,所以当我在 2 月份查看这份报告时,我想有一个名为“增长”的单独列,它将从 12 月的总成员 class 中减去 1 月的总成员 class 并显示增长。当我们移动到三月时,它会通过用一月减去二月的总成员 class 来做同样的事情,并在增长列中显示差异。任何有关如何通过查询实现它的帮助将不胜感激。我正在使用 MS SQL.
正如我提到的,如果您使用的是 SQL 服务器的受支持版本(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;