MovingCOUNT
Updated 2023-11-13 21:10:18.487000
Syntax
SELECT [westclintech].[wct].[MovingCOUNT](
<@Val, sql_variant,>
,<@Offset, int,>
,<@RowNum, int,>
,<@Id, tinyint,>
,<@CountNulls, bit,>)
Description
Use the scalar function MovingCOUNT to show how many rows are included in an ordered resultant table or within a partition in the resultant table, without having to do a self-join. The count is calculated for each value from the first value in the window to the last value in the window. If the column values are presented to the functions out of order, an error message will be generated.
Arguments
@Id
a unique identifier for the MovingCOUNT calculation. @Id allows you to specify multiple moving sums within a resultant table. @Id is an expression of type tinyint or of a type that can be implicitly converted to tinyint.
@Offset
specifies the window size. @Offset is an expression of type int or of a type that can be implicitly converted to int.
@Val
the value passed into the function. @Val is an expression of type float or of a type that can be implicitly converted to float.
@RowNum
the number of the row within the group for which the sum is being calculated. If @RowNum for the current row in a set is less than or equal to the previous @RowNum and @RowNum is not equal to 1, an error message will be generated. @RowNum is an expression of type int or of a type that can be implicitly converted to int.
@CountNulls
Indicates whether NULL values are included in the count. Enter 'True' to count NULL or 'False' not to count NULL. @CountNulls is an expression of type bit or of a type that can be implicitly converted to bit.
Return Type
float
Remarks
If @Id is NULL then @Id = 0.
To calculate a running count from the first record in a dataset or partition, use the RunningCOUNT function.
@RowNum must be in ascending order.
There may be cases where the order in which the data are returned to the function and the order in which the results are returned are different, generally due to parallelism. You can use OPTION(MAXDOP 1) or OPTION(MAXDOP 1,FORCE ORDER) to help eliminate this problem.
Examples
In this example we will calculate the running count of items for a check book. We will create a temporary table, #c, populate it with some data and then run the SELECT.
--Create the temporary table
CREATE TABLE #c
(
trn int,
cust_ref varchar(5),
date_trn datetime,
payee varchar(20),
amt_trn money,
PRIMARY KEY (trn)
);
--Populate the table with some data
INSERT INTO #c
VALUES
(1, 'DD', '2011-12-23', NULL, 1500);
INSERT INTO #c
VALUES
(2, '1200', '2012-01-01', 'Car Leasing Company', -361.75);
INSERT INTO #c
VALUES
(3, '1201', '2012-01-01', 'Mortgage Bank', -1129.23);
INSERT INTO #c
VALUES
(4, 'DD', '2012-01-08', NULL, 1100);
INSERT INTO #c
VALUES
(5, '1202', '2012-01-15', 'Gas Company', -108.49);
INSERT INTO #c
VALUES
(6, '1203', '2012-01-15', 'Electric Company', -98.27);
INSERT INTO #c
VALUES
(7, '1204', '2012-01-15', 'Telephone Company', -136.6);
INSERT INTO #c
VALUES
(8, 'DD', '2012-02-15', NULL, 1100);
INSERT INTO #c
VALUES
(9, '1205', '2012-02-01', 'Car Leasing Company', -361.75);
INSERT INTO #c
VALUES
(10, '1206', '2012-02-01', 'Mortgage Bank', -1129.23);
INSERT INTO #c
VALUES
(11, 'DD', '2012-02-08', NULL, 1100);
INSERT INTO #c
VALUES
(12, '1207', '2012-02-15', 'Gas Company', -153.89);
INSERT INTO #c
VALUES
(13, '1208', '2012-02-15', 'Electric Company', -121.99);
INSERT INTO #c
VALUES
(14, '1209', '2012-02-15', 'Telephone Company', -138.92);
INSERT INTO #c
VALUES
(15, 'DD', '2012-02-23', NULL, 1100);
INSERT INTO #c
VALUES
(16, '1210', '2012-03-01', 'Car Leasing Company', -361.75);
INSERT INTO #c
VALUES
(17, '1211', '2012-03-01', 'Mortgage Bank', -1129.23);
INSERT INTO #c
VALUES
(18, 'DD', '2012-03-08', NULL, 1100);
INSERT INTO #c
VALUES
(19, '1212', '2012-03-15', 'Gas Company', -70.79);;
INSERT INTO #c
VALUES
(20, '1213', '2012-03-15', 'Electric Company', -93.57);
INSERT INTO #c
VALUES
(21, '1214', '2012-03-15', 'Telephone Company', -149.78);
INSERT INTO #c
VALUES
(22, 'DD', '2012-03-23', NULL, 1100);
INSERT INTO #c
VALUES
(23, '1215', '2012-04-01', 'Car Leasing Company', -361.75);
INSERT INTO #c
VALUES
(24, '1216', '2012-04-01', 'Mortgage Bank', -1129.23);
INSERT INTO #c
VALUES
(25, 'DD', '2012-04-08', NULL, 1100);
INSERT INTO #c
VALUES
(26, '1217', '2012-04-15', 'Gas Company', -105.58);
INSERT INTO #c
VALUES
(27, '1218', '2012-04-15', 'Electric Company', -149.36);
INSERT INTO #c
VALUES
(28, '1219', '2012-04-15', 'Telephone Company', -145.35);
INSERT INTO #c
VALUES
(29, 'DD', '2012-04-23', NULL, 1100);
INSERT INTO #c
VALUES
(30, '1220', '2012-05-01', 'Car Leasing Company', -361.75);
INSERT INTO #c
VALUES
(31, '1221', '2012-05-01', 'Mortgage Bank', -1129.23);
INSERT INTO #c
VALUES
(32, 'DD', '2012-05-08', NULL, 1100);
INSERT INTO #c
VALUES
(33, '1222', '2012-05-15', 'Gas Company', -96.27);
INSERT INTO #c
VALUES
(34, '1223', '2012-05-15', 'Electric Company', -114.62);
INSERT INTO #c
VALUES
(35, '1224', '2012-05-15', 'Telephone Company', -145.43);
INSERT INTO #c
VALUES
(36, 'DD', '2012-05-23', NULL, 1100);
INSERT INTO #c
VALUES
(37, '1225', '2012-06-01', 'Car Leasing Company', -361.75);
INSERT INTO #c
VALUES
(38, '1226', '2012-06-01', 'Mortgage Bank', -1129.23);
INSERT INTO #c
VALUES
(39, 'DD', '2012-06-08', NULL, 1100);
INSERT INTO #c
VALUES
(40, '1227', '2012-06-15', 'Gas Company', -147.03);
INSERT INTO #c
VALUES
(41, '1228', '2012-06-15', 'Electric Company', -130.52);
INSERT INTO #c
VALUES
(42, '1229', '2012-06-15', 'Telephone Company', -147.71);
INSERT INTO #c
VALUES
(43, 'DD', '2012-06-23', NULL, 1100);
INSERT INTO #c
VALUES
(44, '1230', '2012-07-01', 'Car Leasing Company', -361.75);
INSERT INTO #c
VALUES
(45, '1231', '2012-07-01', 'Mortgage Bank', -1129.23);
INSERT INTO #c
VALUES
(46, 'DD', '2012-07-08', NULL, 1100);
--Calculate the moving COUNT
SELECT cast(convert(varchar, date_trn, 106) as char(11)) as date_trn,
cust_ref,
payee,
amt_trn,
wct.MovingCOUNT(payee, 5, trn, NULL, 'False') as [Moving Count]
FROM #c;
--Clean up
DROP TABLE #c;
This produces the following result.
{"columns":[{"field":"date_trn","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"cust_ref"},{"field":"payee"},{"field":"amt_trn","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"Moving Count","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"}],"rows":[{"date_trn":"23 Dec 2011","cust_ref":"DD","payee":"NULL","amt_trn":"1500.00","Moving Count":"0"},{"date_trn":"01 Jan 2012","cust_ref":"1200","payee":"Car Leasing Company","amt_trn":"-361.75","Moving Count":"1"},{"date_trn":"01 Jan 2012","cust_ref":"1201","payee":"Mortgage Bank","amt_trn":"-1129.23","Moving Count":"2"},{"date_trn":"08 Jan 2012","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","Moving Count":"2"},{"date_trn":"15 Jan 2012","cust_ref":"1202","payee":"Gas Company","amt_trn":"-108.49","Moving Count":"3"},{"date_trn":"15 Jan 2012","cust_ref":"1203","payee":"Electric Company","amt_trn":"-98.27","Moving Count":"4"},{"date_trn":"15 Jan 2012","cust_ref":"1204","payee":"Telephone Company","amt_trn":"-136.60","Moving Count":"5"},{"date_trn":"15 Feb 2012","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","Moving Count":"4"},{"date_trn":"01 Feb 2012","cust_ref":"1205","payee":"Car Leasing Company","amt_trn":"-361.75","Moving Count":"4"},{"date_trn":"01 Feb 2012","cust_ref":"1206","payee":"Mortgage Bank","amt_trn":"-1129.23","Moving Count":"5"},{"date_trn":"08 Feb 2012","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","Moving Count":"4"},{"date_trn":"15 Feb 2012","cust_ref":"1207","payee":"Gas Company","amt_trn":"-153.89","Moving Count":"4"},{"date_trn":"15 Feb 2012","cust_ref":"1208","payee":"Electric Company","amt_trn":"-121.99","Moving Count":"4"},{"date_trn":"15 Feb 2012","cust_ref":"1209","payee":"Telephone Company","amt_trn":"-138.92","Moving Count":"5"},{"date_trn":"23 Feb 2012","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","Moving Count":"4"},{"date_trn":"01 Mar 2012","cust_ref":"1210","payee":"Car Leasing Company","amt_trn":"-361.75","Moving Count":"4"},{"date_trn":"01 Mar 2012","cust_ref":"1211","payee":"Mortgage Bank","amt_trn":"-1129.23","Moving Count":"5"},{"date_trn":"08 Mar 2012","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","Moving Count":"4"},{"date_trn":"15 Mar 2012","cust_ref":"1212","payee":"Gas Company","amt_trn":"-70.79","Moving Count":"4"},{"date_trn":"15 Mar 2012","cust_ref":"1213","payee":"Electric Company","amt_trn":"-93.57","Moving Count":"4"},{"date_trn":"15 Mar 2012","cust_ref":"1214","payee":"Telephone Company","amt_trn":"-149.78","Moving Count":"5"},{"date_trn":"23 Mar 2012","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","Moving Count":"4"},{"date_trn":"01 Apr 2012","cust_ref":"1215","payee":"Car Leasing Company","amt_trn":"-361.75","Moving Count":"4"},{"date_trn":"01 Apr 2012","cust_ref":"1216","payee":"Mortgage Bank","amt_trn":"-1129.23","Moving Count":"5"},{"date_trn":"08 Apr 2012","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","Moving Count":"4"},{"date_trn":"15 Apr 2012","cust_ref":"1217","payee":"Gas Company","amt_trn":"-105.58","Moving Count":"4"},{"date_trn":"15 Apr 2012","cust_ref":"1218","payee":"Electric Company","amt_trn":"-149.36","Moving Count":"4"},{"date_trn":"15 Apr 2012","cust_ref":"1219","payee":"Telephone Company","amt_trn":"-145.35","Moving Count":"5"},{"date_trn":"23 Apr 2012","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","Moving Count":"4"},{"date_trn":"01 May 2012","cust_ref":"1220","payee":"Car Leasing Company","amt_trn":"-361.75","Moving Count":"4"},{"date_trn":"01 May 2012","cust_ref":"1221","payee":"Mortgage Bank","amt_trn":"-1129.23","Moving Count":"5"},{"date_trn":"08 May 2012","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","Moving Count":"4"},{"date_trn":"15 May 2012","cust_ref":"1222","payee":"Gas Company","amt_trn":"-96.27","Moving Count":"4"},{"date_trn":"15 May 2012","cust_ref":"1223","payee":"Electric Company","amt_trn":"-114.62","Moving Count":"4"},{"date_trn":"15 May 2012","cust_ref":"1224","payee":"Telephone Company","amt_trn":"-145.43","Moving Count":"5"},{"date_trn":"23 May 2012","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","Moving Count":"4"},{"date_trn":"01 Jun 2012","cust_ref":"1225","payee":"Car Leasing Company","amt_trn":"-361.75","Moving Count":"4"},{"date_trn":"01 Jun 2012","cust_ref":"1226","payee":"Mortgage Bank","amt_trn":"-1129.23","Moving Count":"5"},{"date_trn":"08 Jun 2012","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","Moving Count":"4"},{"date_trn":"15 Jun 2012","cust_ref":"1227","payee":"Gas Company","amt_trn":"-147.03","Moving Count":"4"},{"date_trn":"15 Jun 2012","cust_ref":"1228","payee":"Electric Company","amt_trn":"-130.52","Moving Count":"4"},{"date_trn":"15 Jun 2012","cust_ref":"1229","payee":"Telephone Company","amt_trn":"-147.71","Moving Count":"5"},{"date_trn":"23 Jun 2012","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","Moving Count":"4"},{"date_trn":"01 Jul 2012","cust_ref":"1230","payee":"Car Leasing Company","amt_trn":"-361.75","Moving Count":"4"},{"date_trn":"01 Jul 2012","cust_ref":"1231","payee":"Mortgage Bank","amt_trn":"-1129.23","Moving Count":"5"},{"date_trn":"08 Jul 2012","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","Moving Count":"4"}]}
In this example, we calculate the running count and the running count for each month and use the ROW_NUMBER() function to determine the @RowNum value passed into the MovingCOUNT function.
SELECT CAST(date_trn as date) as date_trn,
cust_ref,
payee,
amt_trn,
wct.MovingCOUNT(payee, 5, ROW_NUMBER() OVER (PARTITION by MONTH(date_trn)
ORDER BY trn), 1, 'False') as [MTD Count],
wct.MovingCOUNT(amt_trn, 5, trn, NULL, 'False') as [Moving Ct]
FROM #c
ORDER BY trn;
This produces the following result.
{"columns":[{"field":"date_trn","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"cust_ref"},{"field":"payee"},{"field":"amt_trn","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"MTD Count","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"Moving Ct","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"}],"rows":[{"date_trn":"2011-12-23","cust_ref":"DD","payee":"NULL","amt_trn":"1500.00","MTD Count":"0","Moving Ct":"1"},{"date_trn":"2012-01-01","cust_ref":"1200","payee":"Car Leasing Company","amt_trn":"-361.75","MTD Count":"1","Moving Ct":"2"},{"date_trn":"2012-01-01","cust_ref":"1201","payee":"Mortgage Bank","amt_trn":"-1129.23","MTD Count":"2","Moving Ct":"3"},{"date_trn":"2012-01-08","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","MTD Count":"2","Moving Ct":"4"},{"date_trn":"2012-01-15","cust_ref":"1202","payee":"Gas Company","amt_trn":"-108.49","MTD Count":"3","Moving Ct":"5"},{"date_trn":"2012-01-15","cust_ref":"1203","payee":"Electric Company","amt_trn":"-98.27","MTD Count":"4","Moving Ct":"6"},{"date_trn":"2012-01-15","cust_ref":"1204","payee":"Telephone Company","amt_trn":"-136.60","MTD Count":"5","Moving Ct":"6"},{"date_trn":"2012-02-15","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","MTD Count":"0","Moving Ct":"6"},{"date_trn":"2012-02-01","cust_ref":"1205","payee":"Car Leasing Company","amt_trn":"-361.75","MTD Count":"1","Moving Ct":"6"},{"date_trn":"2012-02-01","cust_ref":"1206","payee":"Mortgage Bank","amt_trn":"-1129.23","MTD Count":"2","Moving Ct":"6"},{"date_trn":"2012-02-08","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","MTD Count":"2","Moving Ct":"6"},{"date_trn":"2012-02-15","cust_ref":"1207","payee":"Gas Company","amt_trn":"-153.89","MTD Count":"3","Moving Ct":"6"},{"date_trn":"2012-02-15","cust_ref":"1208","payee":"Electric Company","amt_trn":"-121.99","MTD Count":"4","Moving Ct":"6"},{"date_trn":"2012-02-15","cust_ref":"1209","payee":"Telephone Company","amt_trn":"-138.92","MTD Count":"5","Moving Ct":"6"},{"date_trn":"2012-02-23","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","MTD Count":"4","Moving Ct":"6"},{"date_trn":"2012-03-01","cust_ref":"1210","payee":"Car Leasing Company","amt_trn":"-361.75","MTD Count":"1","Moving Ct":"6"},{"date_trn":"2012-03-01","cust_ref":"1211","payee":"Mortgage Bank","amt_trn":"-1129.23","MTD Count":"2","Moving Ct":"6"},{"date_trn":"2012-03-08","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","MTD Count":"2","Moving Ct":"6"},{"date_trn":"2012-03-15","cust_ref":"1212","payee":"Gas Company","amt_trn":"-70.79","MTD Count":"3","Moving Ct":"6"},{"date_trn":"2012-03-15","cust_ref":"1213","payee":"Electric Company","amt_trn":"-93.57","MTD Count":"4","Moving Ct":"6"},{"date_trn":"2012-03-15","cust_ref":"1214","payee":"Telephone Company","amt_trn":"-149.78","MTD Count":"5","Moving Ct":"6"},{"date_trn":"2012-03-23","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","MTD Count":"4","Moving Ct":"6"},{"date_trn":"2012-04-01","cust_ref":"1215","payee":"Car Leasing Company","amt_trn":"-361.75","MTD Count":"1","Moving Ct":"6"},{"date_trn":"2012-04-01","cust_ref":"1216","payee":"Mortgage Bank","amt_trn":"-1129.23","MTD Count":"2","Moving Ct":"6"},{"date_trn":"2012-04-08","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","MTD Count":"2","Moving Ct":"6"},{"date_trn":"2012-04-15","cust_ref":"1217","payee":"Gas Company","amt_trn":"-105.58","MTD Count":"3","Moving Ct":"6"},{"date_trn":"2012-04-15","cust_ref":"1218","payee":"Electric Company","amt_trn":"-149.36","MTD Count":"4","Moving Ct":"6"},{"date_trn":"2012-04-15","cust_ref":"1219","payee":"Telephone Company","amt_trn":"-145.35","MTD Count":"5","Moving Ct":"6"},{"date_trn":"2012-04-23","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","MTD Count":"4","Moving Ct":"6"},{"date_trn":"2012-05-01","cust_ref":"1220","payee":"Car Leasing Company","amt_trn":"-361.75","MTD Count":"1","Moving Ct":"6"},{"date_trn":"2012-05-01","cust_ref":"1221","payee":"Mortgage Bank","amt_trn":"-1129.23","MTD Count":"2","Moving Ct":"6"},{"date_trn":"2012-05-08","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","MTD Count":"2","Moving Ct":"6"},{"date_trn":"2012-05-15","cust_ref":"1222","payee":"Gas Company","amt_trn":"-96.27","MTD Count":"3","Moving Ct":"6"},{"date_trn":"2012-05-15","cust_ref":"1223","payee":"Electric Company","amt_trn":"-114.62","MTD Count":"4","Moving Ct":"6"},{"date_trn":"2012-05-15","cust_ref":"1224","payee":"Telephone Company","amt_trn":"-145.43","MTD Count":"5","Moving Ct":"6"},{"date_trn":"2012-05-23","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","MTD Count":"4","Moving Ct":"6"},{"date_trn":"2012-06-01","cust_ref":"1225","payee":"Car Leasing Company","amt_trn":"-361.75","MTD Count":"1","Moving Ct":"6"},{"date_trn":"2012-06-01","cust_ref":"1226","payee":"Mortgage Bank","amt_trn":"-1129.23","MTD Count":"2","Moving Ct":"6"},{"date_trn":"2012-06-08","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","MTD Count":"2","Moving Ct":"6"},{"date_trn":"2012-06-15","cust_ref":"1227","payee":"Gas Company","amt_trn":"-147.03","MTD Count":"3","Moving Ct":"6"},{"date_trn":"2012-06-15","cust_ref":"1228","payee":"Electric Company","amt_trn":"-130.52","MTD Count":"4","Moving Ct":"6"},{"date_trn":"2012-06-15","cust_ref":"1229","payee":"Telephone Company","amt_trn":"-147.71","MTD Count":"5","Moving Ct":"6"},{"date_trn":"2012-06-23","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","MTD Count":"4","Moving Ct":"6"},{"date_trn":"2012-07-01","cust_ref":"1230","payee":"Car Leasing Company","amt_trn":"-361.75","MTD Count":"1","Moving Ct":"6"},{"date_trn":"2012-07-01","cust_ref":"1231","payee":"Mortgage Bank","amt_trn":"-1129.23","MTD Count":"2","Moving Ct":"6"},{"date_trn":"2012-07-08","cust_ref":"DD","payee":"NULL","amt_trn":"1100.00","MTD Count":"2","Moving Ct":"6"}]}