Logo

SQL Server MovingINTERCEPT Function

Updated 2023-11-13 21:20:30.677000

Description

Use the scalar function MovingINTERCEPT to calculate the intercept of a series of x- and y-values within a resultant table or partition, without the need for a self-join. The intercept value 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.

Syntax

SELECT [westclintech].[wct].[MovingINTERCEPT](
  <@y, float,>
 ,<@x, float,>
 ,<@Offset, int,>
 ,<@RowNum, int,>
 ,<@Id, tinyint,>)

Arguments

@Offset

specifies the window size. @Offset is an expression of type int or of a type that can be implicitly converted to int.

@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.

@Id

a unique identifier for the MovingINTERCEPT calculation. @Id allows you to specify multiple MovingINTERCEPT calculations within a resultant table. @Id is an expression of type tinyint or of a type that can be implicitly converted to tinyint.

Return Type

float

Remarks

If @Id is NULL then @Id = 0.

@RowNum must be in ascending order.

To calculate the intercept from the first row in a data set or partition use the RunningINTERCEPT function.

If @RowNum = 1 then MovingINTERCEPT is NULL.

Set @X to NULL to have the function maintain a constant set of x-values in the range 1 to window-size.

To calculate a single intercept value for a set of data use the INTERCEPT function.

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 intercept, over time, in the closing prices for some stock indices, with the offset set to 9, meaning that the intercept will be calculated using the current row and the nine preceding rows. We will create a temporary table, #p, populate it with some data and then run the SELECT.

--Create the temporary table
CREATE TABLE #p
(
    ticker varchar(4),
    date_trade datetime,
    price_open money,
    price_high money,
    price_low money,
    price_close money,
    volume bigint,
    price_adj_close money,
    PRIMARY KEY (
                    ticker,
                    date_trade
                )
);
--Populate the table with some data
INSERT INTO #p
VALUES
('GSPC', '2012-10-26', 1412.97, 1417.09, 1403.28, 1411.94, 3284910000, 1411.94);
INSERT INTO #p
VALUES
('GSPC', '2012-10-25', 1409.74, 1421.12, 1405.14, 1412.97, 3512640000, 1412.97);
INSERT INTO #p
VALUES
('GSPC', '2012-10-24', 1413.2, 1420.04, 1407.1, 1408.75, 3385970000, 1408.75);
INSERT INTO #p
VALUES
('GSPC', '2012-10-23', 1433.74, 1433.74, 1407.56, 1413.11, 3587670000, 1413.11);
INSERT INTO #p
VALUES
('GSPC', '2012-10-22', 1433.21, 1435.46, 1422.06, 1433.81, 3216220000, 1433.81);
INSERT INTO #p
VALUES
('GSPC', '2012-10-19', 1457.34, 1457.34, 1429.85, 1433.19, 3875170000, 1433.19);
INSERT INTO #p
VALUES
('GSPC', '2012-10-18', 1460.94, 1464.02, 1452.63, 1457.34, 3880030000, 1457.34);
INSERT INTO #p
VALUES
('GSPC', '2012-10-17', 1454.22, 1462.2, 1453.35, 1460.91, 3655320000, 1460.91);
INSERT INTO #p
VALUES
('GSPC', '2012-10-16', 1440.31, 1455.51, 1440.31, 1454.92, 3568770000, 1454.92);
INSERT INTO #p
VALUES
('GSPC', '2012-10-15', 1428.75, 1441.31, 1427.24, 1440.13, 3483810000, 1440.13);
INSERT INTO #p
VALUES
('GSPC', '2012-10-12', 1432.84, 1438.43, 1425.53, 1428.59, 3134750000, 1428.59);
INSERT INTO #p
VALUES
('GSPC', '2012-10-11', 1432.82, 1443.9, 1432.82, 1432.84, 3672540000, 1432.84);
INSERT INTO #p
VALUES
('GSPC', '2012-10-10', 1441.48, 1442.52, 1430.64, 1432.56, 3225060000, 1432.56);
INSERT INTO #p
VALUES
('GSPC', '2012-10-09', 1455.9, 1455.9, 1441.18, 1441.48, 3216320000, 1441.48);
INSERT INTO #p
VALUES
('GSPC', '2012-10-08', 1460.93, 1460.93, 1453.1, 1455.88, 2328720000, 1455.88);
INSERT INTO #p
VALUES
('GSPC', '2012-10-05', 1461.4, 1470.96, 1456.89, 1460.93, 3172940000, 1460.93);
INSERT INTO #p
VALUES
('GSPC', '2012-10-04', 1451.08, 1463.14, 1451.08, 1461.4, 3615860000, 1461.4);
INSERT INTO #p
VALUES
('GSPC', '2012-10-03', 1446.05, 1454.3, 1441.99, 1450.99, 3531640000, 1450.99);
INSERT INTO #p
VALUES
('GSPC', '2012-10-02', 1444.99, 1451.52, 1439.01, 1445.75, 3321790000, 1445.75);
INSERT INTO #p
VALUES
('GSPC', '2012-10-01', 1440.9, 1457.14, 1440.9, 1444.49, 3505080000, 1444.49);
INSERT INTO #p
VALUES
('GSPC', '2012-09-28', 1447.13, 1447.13, 1435.6, 1440.67, 3509230000, 1440.67);
INSERT INTO #p
VALUES
('GSPC', '2012-09-27', 1433.36, 1450.2, 1433.36, 1447.15, 3150330000, 1447.15);
INSERT INTO #p
VALUES
('GSPC', '2012-09-26', 1441.6, 1441.6, 1430.53, 1433.32, 3565380000, 1433.32);
INSERT INTO #p
VALUES
('GSPC', '2012-09-25', 1456.94, 1463.24, 1441.59, 1441.59, 3739900000, 1441.59);
INSERT INTO #p
VALUES
('GSPC', '2012-09-24', 1459.76, 1460.72, 1452.06, 1456.89, 3008920000, 1456.89);
INSERT INTO #p
VALUES
('GSPC', '2012-09-21', 1460.34, 1467.07, 1459.51, 1460.15, 4833870000, 1460.15);
INSERT INTO #p
VALUES
('GSPC', '2012-09-20', 1461.05, 1461.23, 1449.98, 1460.26, 3382520000, 1460.26);
INSERT INTO #p
VALUES
('GSPC', '2012-09-19', 1459.5, 1465.15, 1457.88, 1461.05, 3451360000, 1461.05);
INSERT INTO #p
VALUES
('GSPC', '2012-09-18', 1461.19, 1461.47, 1456.13, 1459.32, 3377390000, 1459.32);
INSERT INTO #p
VALUES
('GSPC', '2012-09-17', 1465.42, 1465.63, 1457.55, 1461.19, 3482430000, 1461.19);
INSERT INTO #p
VALUES
('GSPC', '2012-09-14', 1460.07, 1474.51, 1460.07, 1465.77, 5041990000, 1465.77);
INSERT INTO #p
VALUES
('GSPC', '2012-09-13', 1436.56, 1463.76, 1435.34, 1459.99, 4606550000, 1459.99);
INSERT INTO #p
VALUES
('GSPC', '2012-09-12', 1433.56, 1439.15, 1432.99, 1436.56, 3641200000, 1436.56);
INSERT INTO #p
VALUES
('GSPC', '2012-09-11', 1429.13, 1437.76, 1429.13, 1433.56, 3509630000, 1433.56);
INSERT INTO #p
VALUES
('GSPC', '2012-09-10', 1437.92, 1438.74, 1428.98, 1429.08, 3223670000, 1429.08);
INSERT INTO #p
VALUES
('GSPC', '2012-09-07', 1432.12, 1437.92, 1431.45, 1437.92, 3717620000, 1437.92);
INSERT INTO #p
VALUES
('GSPC', '2012-09-06', 1403.74, 1432.12, 1403.74, 1432.12, 3952870000, 1432.12);
INSERT INTO #p
VALUES
('GSPC', '2012-09-05', 1404.94, 1408.81, 1401.25, 1403.44, 3389110000, 1403.44);
INSERT INTO #p
VALUES
('GSPC', '2012-09-04', 1406.54, 1409.31, 1396.56, 1404.94, 3200310000, 1404.94);
INSERT INTO #p
VALUES
('GSPC', '2012-08-31', 1400.07, 1413.09, 1398.96, 1406.58, 2938250000, 1406.58);
INSERT INTO #p
VALUES
('GSPC', '2012-08-30', 1410.08, 1410.08, 1397.01, 1399.48, 2530280000, 1399.48);
INSERT INTO #p
VALUES
('GSPC', '2012-08-29', 1409.32, 1413.95, 1406.57, 1410.49, 2571220000, 1410.49);
INSERT INTO #p
VALUES
('GSPC', '2012-08-28', 1410.44, 1413.63, 1405.59, 1409.3, 2629090000, 1409.3);
INSERT INTO #p
VALUES
('GSPC', '2012-08-27', 1411.13, 1416.17, 1409.11, 1410.44, 2472500000, 1410.44);
INSERT INTO #p
VALUES
('GSPC', '2012-08-24', 1401.99, 1413.46, 1398.04, 1411.13, 2598790000, 1411.13);
INSERT INTO #p
VALUES
('DJI', '2012-10-26', 13104.22, 13151.72, 13040.17, 13107.21, 1346400, 13107.21);
INSERT INTO #p
VALUES
('DJI', '2012-10-25', 13079.64, 13214.11, 13017.37, 13103.68, 1145900, 13103.68);
INSERT INTO #p
VALUES
('DJI', '2012-10-24', 13103.53, 13155.21, 13063.63, 13077.34, 1106700, 13077.34);
INSERT INTO #p
VALUES
('DJI', '2012-10-23', 13344.9, 13344.9, 13083.28, 13102.53, 1222200, 13102.53);
INSERT INTO #p
VALUES
('DJI', '2012-10-22', 13344.28, 13368.55, 13235.15, 13345.89, 1218800, 13345.89);
INSERT INTO #p
VALUES
('DJI', '2012-10-19', 13545.33, 13545.49, 13312.22, 13343.51, 2390800, 13343.51);
INSERT INTO #p
VALUES
('DJI', '2012-10-18', 13553.24, 13588.73, 13510.93, 13548.94, 1284100, 13548.94);
INSERT INTO #p
VALUES
('DJI', '2012-10-17', 13539.63, 13561.65, 13468.9, 13557, 1355700, 13557);
INSERT INTO #p
VALUES
('DJI', '2012-10-16', 13423.84, 13556.37, 13423.76, 13551.78, 1134500, 13551.78);
INSERT INTO #p
VALUES
('DJI', '2012-10-15', 13329.54, 13437.66, 13325.93, 13424.23, 1148800, 13424.23);
INSERT INTO #p
VALUES
('DJI', '2012-10-12', 13325.62, 13401.32, 13296.43, 13328.85, 1137400, 13328.85);
INSERT INTO #p
VALUES
('DJI', '2012-10-11', 13346.28, 13428.49, 13326.12, 13326.39, 866300, 13326.39);
INSERT INTO #p
VALUES
('DJI', '2012-10-10', 13473.53, 13478.83, 13327.62, 13344.97, 1011200, 13344.97);
INSERT INTO #p
VALUES
('DJI', '2012-10-09', 13582.88, 13592.33, 13473.31, 13473.53, 1036300, 13473.53);
INSERT INTO #p
VALUES
('DJI', '2012-10-08', 13589.26, 13610.38, 13552.09, 13583.65, 713000, 13583.65);
INSERT INTO #p
VALUES
('DJI', '2012-10-05', 13569.18, 13661.87, 13568.75, 13610.15, 1155000, 13610.15);
INSERT INTO #p
VALUES
('DJI', '2012-10-04', 13495.18, 13594.33, 13495.18, 13575.36, 1063900, 13575.36);
INSERT INTO #p
VALUES
('DJI', '2012-10-03', 13479.21, 13536.27, 13439.12, 13494.61, 1038900, 13494.61);
INSERT INTO #p
VALUES
('DJI', '2012-10-02', 13515.3, 13567.06, 13424.92, 13482.36, 907300, 13482.36);
INSERT INTO #p
VALUES
('DJI', '2012-10-01', 13437.66, 13598.25, 13437.66, 13515.11, 1061200, 13515.11);
INSERT INTO #p
VALUES
('DJI', '2012-09-28', 13485.89, 13487.66, 13367.27, 13437.13, 1469500, 13437.13);
INSERT INTO #p
VALUES
('DJI', '2012-09-27', 13413.47, 13522.83, 13413.47, 13485.97, 1139900, 13485.97);
INSERT INTO #p
VALUES
('DJI', '2012-09-26', 13458.63, 13480.37, 13406.91, 13413.51, 1243500, 13413.51);
INSERT INTO #p
VALUES
('DJI', '2012-09-25', 13559.92, 13620.21, 13457.25, 13457.55, 1386300, 13457.55);
INSERT INTO #p
VALUES
('DJI', '2012-09-24', 13577.85, 13601.9, 13521.68, 13558.92, 1203700, 13558.92);
INSERT INTO #p
VALUES
('DJI', '2012-09-21', 13597.24, 13647.1, 13571.53, 13579.47, 4296100, 13579.47);
INSERT INTO #p
VALUES
('DJI', '2012-09-20', 13575.17, 13599.02, 13503, 13596.93, 1179100, 13596.93);
INSERT INTO #p
VALUES
('DJI', '2012-09-19', 13565.41, 13626.48, 13556.74, 13577.96, 1162100, 13577.96);
INSERT INTO #p
VALUES
('DJI', '2012-09-18', 13552.33, 13582.12, 13517.81, 13564.64, 1207200, 13564.64);
INSERT INTO #p
VALUES
('DJI', '2012-09-17', 13588.57, 13593.15, 13526.67, 13553.1, 1280200, 13553.1);
INSERT INTO #p
VALUES
('DJI', '2012-09-14', 13540.4, 13653.24, 13533.94, 13593.37, 1851600, 13593.37);
INSERT INTO #p
VALUES
('DJI', '2012-09-13', 13329.71, 13573.33, 13325.11, 13539.86, 1517700, 13539.86);
INSERT INTO #p
VALUES
('DJI', '2012-09-12', 13321.62, 13373.62, 13317.52, 13333.35, 1115200, 13333.35);
INSERT INTO #p
VALUES
('DJI', '2012-09-11', 13254.6, 13354.34, 13253.21, 13323.36, 1049200, 13323.36);
INSERT INTO #p
VALUES
('DJI', '2012-09-10', 13308.56, 13324.1, 13251.39, 13254.29, 1238100, 13254.29);
INSERT INTO #p
VALUES
('DJI', '2012-09-07', 13289.53, 13320.27, 13266.22, 13306.64, 1422100, 13306.64);
INSERT INTO #p
VALUES
('DJI', '2012-09-06', 13045.23, 13294.13, 13045.08, 13292, 1286500, 13292);
INSERT INTO #p
VALUES
('DJI', '2012-09-05', 13036.09, 13095.91, 13018.74, 13047.48, 925500, 13047.48);
INSERT INTO #p
VALUES
('DJI', '2012-09-04', 13092.15, 13092.39, 12977.09, 13035.94, 1039200, 13035.94);
INSERT INTO #p
VALUES
('DJI', '2012-08-31', 13002.72, 13151.87, 13002.64, 13090.84, 1197800, 13090.84);
INSERT INTO #p
VALUES
('DJI', '2012-08-30', 13101.29, 13101.37, 12978.91, 13000.71, 899800, 13000.71);
INSERT INTO #p
VALUES
('DJI', '2012-08-29', 13103.46, 13144.81, 13081.27, 13107.48, 915300, 13107.48);
INSERT INTO #p
VALUES
('DJI', '2012-08-28', 13122.74, 13147.32, 13081.12, 13102.99, 816300, 13102.99);
INSERT INTO #p
VALUES
('DJI', '2012-08-27', 13157.74, 13176.17, 13115.46, 13124.67, 960700, 13124.67);
INSERT INTO #p
VALUES
('DJI', '2012-08-24', 13052.82, 13175.51, 13027.2, 13157.97, 880300, 13157.97);
INSERT INTO #p
VALUES
('IXIC', '2012-10-26', 2986.05, 2999.14, 2961.16, 2987.95, 1839700000, 2987.95);
INSERT INTO #p
VALUES
('IXIC', '2012-10-25', 3005.04, 3007.71, 2975.98, 2986.12, 1922660000, 2986.12);
INSERT INTO #p
VALUES
('IXIC', '2012-10-24', 3011.82, 3012.95, 2978.73, 2981.7, 1967000000, 2981.7);
INSERT INTO #p
VALUES
('IXIC', '2012-10-23', 2989.44, 3006.59, 2974.07, 2990.46, 1830840000, 2990.46);
INSERT INTO #p
VALUES
('IXIC', '2012-10-22', 3005.92, 3020.61, 2995.78, 3016.96, 1654130000, 3016.96);
INSERT INTO #p
VALUES
('IXIC', '2012-10-19', 3066.56, 3066.56, 3000.27, 3005.62, 2225580000, 3005.62);
INSERT INTO #p
VALUES
('IXIC', '2012-10-18', 3097.77, 3102.56, 3065.24, 3072.87, 2043290000, 3072.87);
INSERT INTO #p
VALUES
('IXIC', '2012-10-17', 3091.38, 3112.45, 3088.05, 3104.12, 1770920000, 3104.12);
INSERT INTO #p
VALUES
('IXIC', '2012-10-16', 3073.21, 3102.97, 3070.25, 3101.17, 1736930000, 3101.17);
INSERT INTO #p
VALUES
('IXIC', '2012-10-15', 3053.21, 3066.31, 3037.27, 3064.18, 1563440000, 3064.18);
INSERT INTO #p
VALUES
('IXIC', '2012-10-12', 3049.08, 3061.77, 3039.58, 3044.11, 1524840000, 3044.11);
INSERT INTO #p
VALUES
('IXIC', '2012-10-11', 3075.89, 3078.08, 3047.14, 3049.41, 1595020000, 3049.41);
INSERT INTO #p
VALUES
('IXIC', '2012-10-10', 3066.25, 3071.57, 3046.78, 3051.78, 1788970000, 3051.78);
INSERT INTO #p
VALUES
('IXIC', '2012-10-09', 3108.01, 3108.01, 3062.52, 3065.02, 1645740000, 3065.02);
INSERT INTO #p
VALUES
('IXIC', '2012-10-08', 3121.33, 3125.49, 3107.57, 3112.35, 1186260000, 3112.35);
INSERT INTO #p
VALUES
('IXIC', '2012-10-05', 3161.21, 3171.46, 3130.76, 3136.19, 1607940000, 3136.19);
INSERT INTO #p
VALUES
('IXIC', '2012-10-04', 3142.38, 3153.48, 3132.56, 3149.46, 1585190000, 3149.46);
INSERT INTO #p
VALUES
('IXIC', '2012-10-03', 3130.85, 3142.36, 3115.04, 3135.23, 1704050000, 3135.23);
INSERT INTO #p
VALUES
('IXIC', '2012-10-02', 3127.73, 3131.64, 3101.64, 3120.04, 1609570000, 3120.04);
INSERT INTO #p
VALUES
('IXIC', '2012-10-01', 3130.31, 3146.99, 3103.89, 3113.53, 1758170000, 3113.53);
INSERT INTO #p
VALUES
('IXIC', '2012-09-28', 3125.31, 3132.51, 3109.91, 3116.23, 1864640000, 3116.23);
INSERT INTO #p
VALUES
('IXIC', '2012-09-27', 3105.87, 3142.02, 3098.46, 3136.6, 1691800000, 3136.6);
INSERT INTO #p
VALUES
('IXIC', '2012-09-26', 3113.4, 3114.54, 3080.28, 3093.7, 1738010000, 3093.7);
INSERT INTO #p
VALUES
('IXIC', '2012-09-25', 3170.37, 3176.3, 3117.73, 3117.73, 1975470000, 3117.73);
INSERT INTO #p
VALUES
('IXIC', '2012-09-24', 3155.35, 3167.74, 3150.71, 3160.78, 1704860000, 3160.78);
INSERT INTO #p
VALUES
('IXIC', '2012-09-21', 3194.86, 3196.93, 3178.09, 3179.96, 2526250000, 3179.96);
INSERT INTO #p
VALUES
('IXIC', '2012-09-20', 3166.84, 3178.45, 3156.46, 3175.96, 1809130000, 3175.96);
INSERT INTO #p
VALUES
('IXIC', '2012-09-19', 3179.04, 3189.35, 3170.29, 3182.62, 1850920000, 3182.62);
INSERT INTO #p
VALUES
('IXIC', '2012-09-18', 3173.62, 3179.37, 3169.41, 3177.8, 1707200000, 3177.8);
INSERT INTO #p
VALUES
('IXIC', '2012-09-17', 3183.4, 3183.4, 3168.63, 3178.67, 1485390000, 3178.67);
INSERT INTO #p
VALUES
('IXIC', '2012-09-14', 3166.24, 3195.67, 3164.26, 3183.95, 1984720000, 3183.95);
INSERT INTO #p
VALUES
('IXIC', '2012-09-13', 3117.66, 3167.63, 3112.62, 3155.83, 1870050000, 3155.83);
INSERT INTO #p
VALUES
('IXIC', '2012-09-12', 3115.33, 3120.12, 3098.82, 3114.31, 1689140000, 3114.31);
INSERT INTO #p
VALUES
('IXIC', '2012-09-11', 3105.02, 3117.86, 3099.1, 3104.53, 1586250000, 3104.53);
INSERT INTO #p
VALUES
('IXIC', '2012-09-10', 3131.34, 3133.89, 3102.76, 3104.02, 1575370000, 3104.02);
INSERT INTO #p
VALUES
('IXIC', '2012-09-07', 3133.22, 3139.61, 3128.17, 3136.42, 1740640000, 3136.42);
INSERT INTO #p
VALUES
('IXIC', '2012-09-06', 3087.94, 3135.81, 3087.67, 3135.81, 1918900000, 3135.81);
INSERT INTO #p
VALUES
('IXIC', '2012-09-05', 3072.58, 3082.75, 3062.54, 3069.27, 1495030000, 3069.27);
INSERT INTO #p
VALUES
('IXIC', '2012-09-04', 3063.25, 3082.26, 3040.24, 3075.06, 1505960000, 3075.06);
INSERT INTO #p
VALUES
('IXIC', '2012-08-31', 3069.64, 3078.52, 3040.59, 3066.96, 1394760000, 3066.96);
INSERT INTO #p
VALUES
('IXIC', '2012-08-30', 3066.73, 3067.54, 3045.92, 3048.71, 1216640000, 3048.71);
INSERT INTO #p
VALUES
('IXIC', '2012-08-29', 3078.05, 3087.24, 3067.62, 3081.19, 1282900000, 3081.19);
INSERT INTO #p
VALUES
('IXIC', '2012-08-28', 3069.4, 3083.19, 3063.65, 3077.14, 1364740000, 3077.14);
INSERT INTO #p
VALUES
('IXIC', '2012-08-27', 3083.62, 3085.81, 3068.13, 3073.19, 1383530000, 3073.19);
INSERT INTO #p
VALUES
('IXIC', '2012-08-24', 3045.22, 3076.8, 3042.22, 3069.79, 1349740000, 3069.79);
--Calculate the INTERCEPT for DJI
SELECT ticker,
       cast(date_trade as date) as [trade date],
       price_close as [Closing Price],
       wct.MovingINTERCEPT(
                              price_close,
                              convert(float, date_trade),
                              9,
                              ROW_NUMBER() over (ORDER BY date_trade ASC),
                              NULL
                          ) as [INTERCEPT]
FROM #p
WHERE ticker = 'DJI'
ORDER BY date_trade ASC;
--Clean up
DROP TABLE #p;

This produces the following result.

tickertrade dateClosing PriceINTERCEPT
DJI2012-08-2413157.97NULL
DJI2012-08-2713124.67469845.270435983
DJI2012-08-2813102.99553556.67002926
DJI2012-08-2913107.48471489.717612114
DJI2012-08-3013000.71886730.362595414
DJI2012-08-3113090.84643747.834434902
DJI2012-09-0413035.94496716.219783845
DJI2012-09-0513047.48409829.67629724
DJI2012-09-0613292.00-44403.3721036542
DJI2012-09-0713306.64-295181.00258685
DJI2012-09-1013254.29-542008.459971776
DJI2012-09-1113323.36-735444.321404394
DJI2012-09-1213333.35-870702.046392294
DJI2012-09-1313539.86-1246747.13725805
DJI2012-09-1413593.37-1467291.2763445
DJI2012-09-1713553.10-1644499.73058225
DJI2012-09-1813564.64-1411511.43672222
DJI2012-09-1913577.96-1101890.88743121
DJI2012-09-2013596.93-1130994.98631007
DJI2012-09-2113579.47-1106566.73528378
DJI2012-09-2413558.92-664847.003184797
DJI2012-09-2513457.55-181452.843235763
DJI2012-09-2613413.51362171.402174615
DJI2012-09-2713485.97478072.986026638
DJI2012-09-2813437.13575982.207032812
DJI2012-10-0113515.11460034.807496188
DJI2012-10-0213482.36410220.359750334
DJI2012-10-0313494.61312144.764872803
DJI2012-10-0413575.3632885.1692340084
DJI2012-10-0513610.15-334342.337812188
DJI2012-10-0813583.65-526223.972706134
DJI2012-10-0913473.53-359831.342292858
DJI2012-10-1013344.9747681.5850020345
DJI2012-10-1113326.39335191.656204434
DJI2012-10-1213328.85748864.957925944
DJI2012-10-1513424.23664637.86480042
DJI2012-10-1613551.78455683.512050535
DJI2012-10-1713557.00287604.388866922
DJI2012-10-1813548.943250.36464128776
DJI2012-10-1913343.51-121615.807152873
DJI2012-10-2213345.89-155012.169428583
DJI2012-10-2313102.53276605.564481351
DJI2012-10-2413077.34810032.45704968
DJI2012-10-2513103.681312260.55141121
DJI2012-10-2613107.211907476.67090713

Notice that in the previous example that the interval between dates is unequal because there are no prices for the weekends and holidays. Additionally, since we start so far away from the origin, the intercept value is misleading. To eliminate both problems, we can set @X to NULL which will have the effect of equally spacing the x-values and starting almost at the point of origin.

SELECT ticker,
       cast(date_trade as date) as [trade date],
       price_close as [Closing Price],
       wct.MovingINTERCEPT(price_close, NULL, 9, ROW_NUMBER() over (ORDER BY 
                 date_trade ASC), NULL) as [INTERCEPT]
FROM #p
WHERE ticker = 'DJI'
ORDER BY date_trade ASC;

This produces the following result.

tickertrade dateClosing PriceINTERCEPT
DJI2012-08-2413157.97NULL
DJI2012-08-2713124.6713191.27
DJI2012-08-2813102.9913183.5233333333
DJI2012-08-2913107.4813166.565
DJI2012-08-3013000.7113198.277
DJI2012-08-3113090.8413167.7473333333
DJI2012-09-0413035.9413165.2328571429
DJI2012-09-0513047.4813156.3832142857
DJI2012-09-0613292.0013093.8580555555
DJI2012-09-0713306.6413056.4286666667
DJI2012-09-1013254.2913016.2993333333
DJI2012-09-1113323.3612984.3173333333
DJI2012-09-1213333.3512973.7006666667
DJI2012-09-1313539.8612935.044
DJI2012-09-1413593.3712964.3366666667
DJI2012-09-1713553.1012999.1333333333
DJI2012-09-1813564.6413088.0593333333
DJI2012-09-1913577.9613204.1826666667
DJI2012-09-2013596.9313237.768
DJI2012-09-2113579.4713288.342
DJI2012-09-2413558.9213385.6446666667
DJI2012-09-2513457.5513491.2973333334
DJI2012-09-2613413.5113610.042
DJI2012-09-2713485.9713623.2673333334
DJI2012-09-2813437.1313617.6966666667
DJI2012-10-0113515.1113604.9066666667
DJI2012-10-0213482.3613590.7486666667
DJI2012-10-0313494.6113562.4393333334
DJI2012-10-0413575.3613503.5706666667
DJI2012-10-0513610.1513444.454
DJI2012-10-0813583.6513402.2726666667
DJI2012-10-0913473.5313431.07
DJI2012-10-1013344.9713507.1966666667
DJI2012-10-1113326.3913548.6553333334
DJI2012-10-1213328.8513601.7753333334
DJI2012-10-1513424.2313592.21
DJI2012-10-1613551.7813566.3593333334
DJI2012-10-1713557.0013538.376
DJI2012-10-1813548.9413478.4806666667
DJI2012-10-1913343.5113441.6746666667
DJI2012-10-2213345.8913398.9833333334
DJI2012-10-2313102.5313440.5026666667
DJI2012-10-2413077.3413522.3213333334
DJI2012-10-2513103.6813589.7006666667
DJI2012-10-2613107.2113640.3786666667

In this example, we calculate the intercept for each of the three indices and compare them side-by-side.

SELECT cast(convert(varchar, p1.date_trade, 106) as char(11)) as [trade date],
       p1.price_close as [S&P],
       ROUND(wct.MovingINTERCEPT(p1.price_close, NULL, 9, ROW_NUMBER() over (ORDER 
                 BY p1.date_trade ASC), 1), 2) as [INTERCEPT],
       p2.price_close as [DJIA],
       ROUND(wct.MovingINTERCEPT(p2.price_close, NULL, 9, ROW_NUMBER() over (ORDER 
                 BY p2.date_trade ASC), 2), 2) as [INTERCEPT],
       p3.price_close as [NASDAQ],
       ROUND(wct.MovingINTERCEPT(p3.price_close, NULL, 9, ROW_NUMBER() over (ORDER 
                 BY p3.date_trade ASC), 3), 2) as [INTERCEPT]
FROM #p p1
    JOIN #p p2
        ON p2.date_trade = p1.date_trade
           AND p2.ticker = 'DJI'
    JOIN #p p3
        ON p3.date_trade = p1.date_trade
           AND p3.ticker = 'IXIC'
WHERE p1.ticker = 'GSPC';

This produces the following result.

trade dateS&PINTERCEPTDJIAINTERCEPTNASDAQINTERCEPT
24 Aug 20121411.1313157.973069.79
27 Aug 20121410.443066.3913124.673066.393073.193066.39
28 Aug 20121409.303066.0213102.993066.023077.143066.02
29 Aug 20121410.493065.7913107.483065.793081.193065.79
30 Aug 20121399.483080.2513000.713080.253048.713080.25
31 Aug 20121406.583077.8513090.843077.853066.963077.85
04 Sep 20121404.943073.8713035.943073.873075.063073.87
05 Sep 20121403.443073.2313047.483073.233069.273073.23
06 Sep 20121432.123057.9613292.003057.963135.813057.96
07 Sep 20121437.923050.0713306.643050.073136.423050.07
10 Sep 20121429.083052.2713254.293052.273104.023052.27
11 Sep 20121433.563055.0613323.363055.063104.533055.06
12 Sep 20121436.563056.1413333.353056.143114.313056.14
13 Sep 20121459.993049.5013539.863049.503155.833049.50
14 Sep 20121465.773057.3713593.373057.373183.953057.37
17 Sep 20121461.193066.8013553.103066.803178.673066.80
18 Sep 20121459.323080.0713564.643080.073177.803080.07
19 Sep 20121461.053101.9313577.963101.933182.623101.93
20 Sep 20121460.263101.6213596.933101.623175.963101.62
21 Sep 20121460.153102.9113579.473102.913179.963102.91
24 Sep 20121456.893126.0513558.923126.053160.783126.05
25 Sep 20121441.593161.3613457.553161.363117.733161.36
26 Sep 20121433.323197.7813413.513197.783093.703197.78
27 Sep 20121447.153204.8713485.973204.873136.603204.87
28 Sep 20121440.673201.6313437.133201.633116.233201.63
01 Oct 20121444.493196.8813515.113196.883113.533196.88
02 Oct 20121445.753186.9013482.363186.903120.043186.90
03 Oct 20121450.993167.7713494.613167.773135.233167.77
04 Oct 20121461.403145.7513575.363145.753149.463145.75
05 Oct 20121460.933122.7513610.153122.753136.193122.75
08 Oct 20121455.883110.5513583.653110.553112.353110.55
09 Oct 20121441.483124.6713473.533124.673065.023124.67
10 Oct 20121432.563149.1513344.973149.153051.783149.15
11 Oct 20121432.843151.2813326.393151.283049.413151.28
12 Oct 20121428.593158.1713328.853158.173044.113158.17
15 Oct 20121440.133157.4913424.233157.493064.183157.49
16 Oct 20121454.923143.0913551.783143.093101.173143.09
17 Oct 20121460.913119.7513557.003119.753104.123119.75
18 Oct 20121457.343093.9513548.943093.953072.873093.95
19 Oct 20121433.193082.6813343.513082.683005.623082.68
22 Oct 20121433.813071.5713345.893071.573016.963071.57
23 Oct 20121413.113081.4813102.533081.482990.463081.48
24 Oct 20121408.753094.3613077.343094.362981.703094.36
25 Oct 20121412.973102.7813103.683102.782986.123102.78
26 Oct 20121411.943109.1013107.213109.102987.953109.10