Logo

SQL Server RunningSLOPE Function

Updated 2023-11-14 15:32:11.127000

Description

Use the scalar function RunningSLOPE to calculate the slope of a series of x- and y-values within a resultant table or partition, without the need for a self-join. The slope value is calculated from the first row of the resultant table or partition through to the current row. If the column values are presented to the functions out of order, an error message will be generated.

Syntax

SELECT [westclintech].[wct].[RunningSLOPE](
  <@Y, float,>
 ,<@X, float,>
 ,<@RowNum, int,>
 ,<@Id, tinyint,>)

Arguments

@Y

the y-value passed into the function. @Y is an expression of type float or of a type that can be implicitly converted to float.

@X

the x-value passed into the function. @X 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.

@Id

a unique identifier for the RunningSLOPE calculation. @Id allows you to specify multiple RunningSLOPE 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 slope over a window of x- and y-values use the MovingSLOPE function.

If @RowNum = 1 then RunningSLOPE is NULL.

To calculate a single slope value for a set of x- and y-values use the SLOPE 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 slope, over time, in the closing prices for some stock indices. 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 SLOPE for DJI
SELECT ticker,
       cast(convert(varchar, date_trade, 106) as char(11)) as [trade date],
       price_close as [Closing Price],
       wct.RunningSLOPE(price_close, convert(float, date_trade), ROW_NUMBER() over 
                 (ORDER BY date_trade ASC), NULL) as [SLOPE]
FROM #p
WHERE ticker = 'DJI'
ORDER BY date_trade ASC;
--Clean up
DROP TABLE #p;

This produces the following result.

tickertrade dateClosing PriceSLOPE
DJI24 Aug 201213157.97NULL
DJI27 Aug 201213124.67-11.1000000105964
DJI28 Aug 201213102.99-13.1346153479356
DJI29 Aug 201213107.48-11.1400000027248
DJI30 Aug 201213000.71-21.2321698170788
DJI31 Aug 201213090.84-15.3267027158995
DJI04 Sep 201213035.94-11.7533266159796
DJI05 Sep 201213047.48-9.64169642754963
DJI06 Sep 201213292.001.39757857186454
DJI07 Sep 201213306.647.49219753312476
DJI10 Sep 201213254.299.20529712518564
DJI11 Sep 201213323.3611.5083543761987
DJI12 Sep 201213333.3512.8233841765938
DJI13 Sep 201213539.8616.9355971590637
DJI14 Sep 201213593.3720.2477040831897
DJI17 Sep 201213553.1021.3690746515016
DJI18 Sep 201213564.6421.9752322900935
DJI19 Sep 201213577.9622.2974125057817
DJI20 Sep 201213596.9322.4961535656962
DJI21 Sep 201213579.4722.2901224512632
DJI24 Sep 201213558.9221.3398632977002
DJI25 Sep 201213457.5519.6836784554935
DJI26 Sep 201213413.5117.9924654283694
DJI27 Sep 201213485.9717.0452394014846
DJI28 Sep 201213437.1315.9137939497098
DJI01 Oct 201213515.1115.110883375204
DJI02 Oct 201213482.3614.2332894725561
DJI03 Oct 201213494.6113.5319004385724
DJI04 Oct 201213575.3613.2754725347393
DJI05 Oct 201213610.1513.1577340681447
DJI08 Oct 201213583.6512.7727484499737
DJI09 Oct 201213473.5311.9818051795135
DJI10 Oct 201213344.9710.8255935105077
DJI11 Oct 201213326.399.76954818674354
DJI12 Oct 201213328.858.86315496858214
DJI15 Oct 201213424.238.26427241290096
DJI16 Oct 201213551.788.12147923266406
DJI17 Oct 201213557.007.99363128510905
DJI18 Oct 201213548.947.84342328181691
DJI19 Oct 201213343.517.18967234675412
DJI22 Oct 201213345.896.54480753721285
DJI23 Oct 201213102.535.41612155938403
DJI24 Oct 201213077.344.38262391801756
DJI25 Oct 201213103.683.53659867569687
DJI26 Oct 201213107.212.80180931021162

Notice that in the previous example that the interval between dates is unequal because there are no prices for the weekends and holidays. To eliminate that, we can use the RANK function which will have the effect of equally spacing the x-values.

SELECT ticker,
       cast(convert(varchar, date_trade, 106) as char(11)) as [trade date],
       price_close as [Closing Price],
       wct.RunningSLOPE(
                           price_close,
                           RANK() over (ORDER BY date_trade ASC),
                           ROW_NUMBER() over (ORDER BY date_trade ASC),
                           NULL
                       ) as [SLOPE]
FROM #p
WHERE ticker = 'DJI'
ORDER BY date_trade ASC;

This produces the following result.

tickertrade dateClosing PriceSLOPE
DJI24 Aug 201213157.97NULL
DJI27 Aug 201213124.67-33.3000000000029
DJI28 Aug 201213102.99-27.4899999999955
DJI29 Aug 201213107.48-17.3149999999965
DJI30 Aug 201213000.71-33.1710000000009
DJI31 Aug 201213090.84-20.086857142856
DJI04 Sep 201213035.94-19.1439285714284
DJI05 Sep 201213047.48-16.1940476190454
DJI06 Sep 201213292.002.56350000000179
DJI07 Sep 201213306.6412.7715151515174
DJI10 Sep 201213254.2915.379454545455
DJI11 Sep 201213323.3618.9490559440571
DJI12 Sep 201213333.3520.8111538461552
DJI13 Sep 201213539.8627.2872967032964
DJI14 Sep 201213593.3732.1523571428577
DJI17 Sep 201213553.1033.8101029411773
DJI18 Sep 201213564.6434.5111029411772
DJI19 Sep 201213577.9634.6312590299279
DJI20 Sep 201213596.9334.4699824561407
DJI21 Sep 201213579.4733.6106240601502
DJI24 Sep 201213558.9232.2710909090909
DJI25 Sep 201213457.5529.6804404291367
DJI26 Sep 201213413.5126.9079841897237
DJI27 Sep 201213485.9725.2287130434784
DJI28 Sep 201213437.1323.2377538461538
DJI01 Oct 201213515.1122.1400957264961
DJI02 Oct 201213482.3620.8333028083029
DJI03 Oct 201213494.6119.7238013136295
DJI04 Oct 201213575.3619.2494187192124
DJI05 Oct 201213610.1518.9640533926591
DJI08 Oct 201213583.6518.4554838709681
DJI09 Oct 201213473.5317.30594941349
DJI10 Oct 201213344.9715.5730949197866
DJI11 Oct 201213326.3913.9563636363637
DJI12 Oct 201213328.8512.5466442577035
DJI15 Oct 201213424.2311.7323011583015
DJI16 Oct 201213551.7811.5373067804646
DJI17 Oct 201213557.0011.3459459459458
DJI18 Oct 201213548.9411.107914979757
DJI19 Oct 201213343.5110.1116350844279
DJI22 Oct 201213345.899.22727003484329
DJI23 Oct 201213102.537.62420630418932
DJI24 Oct 201213077.346.13059649652688
DJI25 Oct 201213103.684.89284918957001
DJI26 Oct 201213107.213.80900922266147
SELECTcast(conver(varchar,p1.date_trad, 106) as char(11)) as
,p1.prce_close as[S&P]
,p2.prce_close as[DJIA]
,p3.prce_close as[NASDAQ]
,ROUNDwct.RunningLOPE(p1.price_close,RNK() over (ORDER BY p1
,ROUNDwct.RunningLOPE(p2.price_close,RNK() over (ORDER BY p2
,ROUNDwct.RunningLOPE(p3.price_close,RNK() over (ORDER BY p3
FROM #p1
JOIN #p2
ON p2.ate_trade =p1.date_trade
AND p2ticker = 'DI'
JOIN #p3
ON p3.ate_trade =p1.date_trade
AND p3ticker = 'IIC'
WHERE1.ticker =GSPC';
SELECT cast(convert(varchar, p1.date_trade, 106) as char(11)) as [trade date],
       p1.price_close as [S&P],
       p2.price_close as [DJIA],
       p3.price_close as [NASDAQ],
       ROUND(
                wct.RunningSLOPE(
                                    p1.price_close,
                                    RANK() over (ORDER BY p1.date_trade ASC),
                                    ROW_NUMBER() over (ORDER BY p1.date_trade ASC)
                                              ,
                                    1
                                ),
                2
            ) as [S&P slope],
       ROUND(
                wct.RunningSLOPE(
                                    p2.price_close,
                                    RANK() over (ORDER BY p2.date_trade ASC),
                                    ROW_NUMBER() over (ORDER BY p2.date_trade ASC)
                                              ,
                                    2
                                ),
                2
            ) as [DJIA slope],
       ROUND(
                wct.RunningSLOPE(
                                    p3.price_close,
                                    RANK() over (ORDER BY p3.date_trade ASC),
                                    ROW_NUMBER() over (ORDER BY p3.date_trade ASC)
                                              ,
                                    3
                                ),
                2
            ) as [NASDAQ slope]
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&PDJIANASDAQS&P slopeDJIA slopeNASDAQ slope
24 Aug 20121411.1313157.973069.79NULLNULLNULL
27 Aug 20121410.4413124.673073.19-0.69-33.33.4
28 Aug 20121409.3013102.993077.14-0.92-27.493.68
29 Aug 20121410.4913107.483081.19-0.31-17.313.82
30 Aug 20121399.4813000.713048.71-2.33-33.17-3.42
31 Aug 20121406.5813090.843066.96-1.56-20.09-2.39
04 Sep 20121404.9413035.943075.06-1.29-19.14-0.9
05 Sep 20121403.4413047.483069.27-1.2-16.19-0.68
06 Sep 20121432.1213292.003135.810.842.563.9
07 Sep 20121437.9213306.643136.422.1512.776.05
10 Sep 20121429.0813254.293104.022.3615.385.48
11 Sep 20121433.5613323.363104.532.5618.954.96
12 Sep 20121436.5613333.353114.312.720.814.8
13 Sep 20121459.9913539.863155.833.3827.295.75
14 Sep 20121465.7713593.373183.953.8832.156.93
17 Sep 20121461.1913553.103178.674.0333.817.45
18 Sep 20121459.3213564.643177.804.0234.517.64
19 Sep 20121461.0513577.963182.623.9734.637.72
20 Sep 20121460.2613596.933175.963.8634.477.56
21 Sep 20121460.1513579.473179.963.7233.617.39
24 Sep 20121456.8913558.923160.783.5332.276.92
25 Sep 20121441.5913457.553117.733.1629.685.97
26 Sep 20121433.3213413.513093.702.7626.914.92
27 Sep 20121447.1513485.973136.602.5625.234.5
28 Sep 20121440.6713437.133116.232.3223.243.93
01 Oct 20121444.4913515.113113.532.1422.143.44
02 Oct 20121445.7513482.363120.041.9920.833.07
03 Oct 20121450.9913494.613135.231.919.722.86
04 Oct 20121461.4013575.363149.461.8919.252.77
05 Oct 20121460.9313610.153136.191.8618.962.59
08 Oct 20121455.8813583.653112.351.7918.462.29
09 Oct 20121441.4813473.533065.021.6517.311.76
10 Oct 20121432.5613344.973051.781.4715.571.24
11 Oct 20121432.8413326.393049.411.3213.960.78
12 Oct 20121428.5913328.853044.111.1612.550.38
15 Oct 20121440.1313424.233064.181.0811.730.12
16 Oct 20121454.9213551.783101.171.0611.540.06
17 Oct 20121460.9113557.003104.121.0711.350.02
18 Oct 20121457.3413548.943072.871.0611.11-0.13
19 Oct 20121433.1913343.513005.620.9610.11-0.51
22 Oct 20121433.8113345.893016.960.879.23-0.79
23 Oct 20121413.1113102.532990.460.737.62-1.12
24 Oct 20121408.7513077.342981.700.586.13-1.43
25 Oct 20121412.9713103.682986.120.474.89-1.68
26 Oct 20121411.9413107.212987.950.363.81-1.89