SQL:将数字重设为100

SQL:将数字重设为100,sql,sql-server,sql-server-2016,rebasing,Sql,Sql Server,Sql Server 2016,Rebasing,我有以下疑问: WITH CTE AS ( SELECT CASE WHEN shareClassdata.valueDate IS NULL THEN NULL ELSE performanceData.valueDate END AS valueDate ,CASE WHEN shareClassdata.benchmarkTypeNa

我有以下疑问:

 WITH CTE
AS (
    SELECT CASE 
            WHEN shareClassdata.valueDate IS NULL
                THEN NULL
            ELSE performanceData.valueDate
            END AS valueDate
        ,CASE 
            WHEN shareClassdata.benchmarkTypeName IS NULL
                THEN NULL
            ELSE performanceData.benchmarkTypeName
            END AS benchmarkTypeName
        ,CASE 
            WHEN shareClassdata.NAVLocal IS NULL
                THEN NULL
            ELSE performanceData.NAVLocal
            END AS NAVLocal
    FROM getPerformances(2, 12045, 0, 308, 31) AS performanceData
    LEFT JOIN (
        SELECT *
        FROM getPerformances(2, 12045, 0, 308, 31)
        ) shareClassdata ON shareClassdata.shareClassGroupId = performanceData.shareClassGroupId
        AND shareClassdata.currencyId = performanceData.currencyId
        AND shareClassdata.financialStructureGroupId = performanceData.financialStructureGroupId
        AND shareClassdata.valueDate = performanceData.valueDate
        AND shareClassdata.benchmarkTypeName = 'Fund'
    WHERE performanceData.shareClassGroupId = 22050
        AND performanceData.valueDate <= '2017-06-30 00:00:00.000'
        AND (
            isnull(performanceData.valueDate, '') <> ''
            AND (
                performanceData.benchmarkTypeName = 'Benchmark'
                OR performanceData.benchmarkTypeName = 'Fund'
                )
            )
    )
SELECT valueDate
    ,benchmarkTypeName
     ,NAVLocal
FROM CTE AS a
WHERE valueDate IS NOT NULL
    AND benchmarkTypeName IS NOT NULL

ORDER BY benchmarkTypeName ASC
    ,valueDate ASC
我需要将第三列的基础重新设置为100,因此我编写了以下内容,这些内容非常有效:

WITH CTE
AS (
    SELECT CASE 
            WHEN shareClassdata.valueDate IS NULL
                THEN NULL
            ELSE performanceData.valueDate
            END AS valueDate
        ,CASE 
            WHEN shareClassdata.benchmarkTypeName IS NULL
                THEN NULL
            ELSE performanceData.benchmarkTypeName
            END AS benchmarkTypeName
        ,CASE 
            WHEN shareClassdata.NAVLocal IS NULL
                THEN NULL
            ELSE performanceData.NAVLocal
            END AS NAVLocal
    FROM getPerformances(2, 12045, 0, 308, 31) AS performanceData
    LEFT JOIN (
        SELECT *
        FROM getPerformances(2, 12045, 0, 308, 31)
        ) shareClassdata ON shareClassdata.shareClassGroupId = performanceData.shareClassGroupId
        AND shareClassdata.currencyId = performanceData.currencyId
        AND shareClassdata.financialStructureGroupId = performanceData.financialStructureGroupId
        AND shareClassdata.valueDate = performanceData.valueDate
        AND shareClassdata.benchmarkTypeName = 'Fund'
    WHERE performanceData.shareClassGroupId = 22050
        AND performanceData.valueDate <= '2017-06-30 00:00:00.000'
        AND (
            isnull(performanceData.valueDate, '') <> ''
            AND (
                performanceData.benchmarkTypeName = 'Benchmark'
                OR performanceData.benchmarkTypeName = 'Fund'
                )
            )
    )
SELECT valueDate
    ,benchmarkTypeName
    ,(
        sum(a.NAVLocal) / (
            SELECT TOP 1 b.NAVLocal
            FROM CTE AS b
            WHERE b.NAVLocal != 0
                AND a.benchmarkTypeName = b.benchmarkTypeName
            ORDER BY b.valueDate ASC
            )
        ) * 100 AS NAVLocal
FROM CTE AS a
WHERE valueDate IS NOT NULL
    AND benchmarkTypeName IS NOT NULL
GROUP BY valueDate
    ,benchmarkTypeName
ORDER BY benchmarkTypeName ASC
    ,valueDate ASC
但是,查询在大型数据集上运行速度非常慢。是否有更好的方法执行此计算

关于重定号码的提示:
对于每一系列的基准测试,结果都会在起息日按升序排序。最重要的值是每个系列中最早的记录。系列的每个导航值除以最早的导航值,再乘以100

您可以使用公式访问此电子表格


谢谢

窗口功能可能有助于提高性能,我从第一个输出开始,但您应该了解如何使用窗口功能实现它

USE
tempdb
GO

DROP TABLE IF EXISTS Rebase;
CREATE TABLE Rebase(
   valueDate         DATE  NOT NULL
  ,benchmarkTypeName VARCHAR(9) NOT NULL
  ,NAVLocal          NUMERIC(8,3) NOT NULL
);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-11-30','Benchmark',3005.969);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-01','Benchmark',2994.498);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-02','Benchmark',2981.919);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-05','Benchmark',2981.438);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-07','Benchmark',3020.056);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-09','Benchmark',3110.806);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-12','Benchmark',3086.448);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-13','Benchmark',3097.514);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-14','Benchmark',3069.051);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-15','Benchmark',3151.476);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-16','Benchmark',3147.683);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-19','Benchmark',3145.644);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-20','Benchmark',3175.352);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-21','Benchmark',3150.925);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-22','Benchmark',3138.262);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-23','Benchmark',3140.907);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-28','Benchmark',3142.341);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-29','Benchmark',3112.916);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-30','Benchmark',3081.546);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-03','Benchmark',3156.683);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-04','Benchmark',3147.517);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-05','Benchmark',3108.027);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-09','Benchmark',3121.824);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-10','Benchmark',3111.075);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-11','Benchmark',3156.886);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-12','Benchmark',3095.468);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-13','Benchmark',3109.505);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-16','Benchmark',3109.505);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-17','Benchmark',3080.419);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-18','Benchmark',3086.207);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-19','Benchmark',3098.868);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-20','Benchmark',3089.861);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-23','Benchmark',3062.108);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-24','Benchmark',3079.78);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-25','Benchmark',3108.255);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-26','Benchmark',3127.415);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-27','Benchmark',3114.021);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-30','Benchmark',3099.602);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-31','Benchmark',3063.617);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-11-30','Fund',280.773);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-01','Fund',279.075);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-02','Fund',278.431);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-05','Fund',279.704);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-07','Fund',284.042);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-09','Fund',290.476);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-12','Fund',289.819);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-13','Fund',292.155);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-14','Fund',290.95);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-15','Fund',291.622);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-16','Fund',292.257);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-19','Fund',293.073);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-20','Fund',294.237);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-21','Fund',293.813);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-22','Fund',292.814);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-23','Fund',293.084);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-28','Fund',294.895);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-29','Fund',294.22);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-30','Fund',295.241);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-03','Fund',296.374);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-04','Fund',294.599);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-05','Fund',295.307);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-09','Fund',294.184);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-10','Fund',294.421);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-11','Fund',294.967);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-12','Fund',293.688);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-13','Fund',295.943);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-16','Fund',294.739);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-17','Fund',294.243);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-18','Fund',295.486);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-19','Fund',294.833);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-20','Fund',294.298);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-23','Fund',293.808);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-24','Fund',294.641);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-25','Fund',296.766);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-26','Fund',297.378);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-27','Fund',297.269);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-30','Fund',294.678);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-31','Fund',292.997);


SELECT
    valueDate
,   benchmarkTypeName
,   NAVLocal
,   FIRST_VALUE(NAVLocal) OVER(PARTITION BY benchmarkTypeName ORDER BY valueDate) AS Oldest
,   (NAVLOCAL / FIRST_VALUE(NAVLocal) OVER(PARTITION BY benchmarkTypeName ORDER BY valueDate)) * 100 aS RebaseValue

FROM
    Rebase

请向我们显示预期结果,并添加一个带有您使用的SQL Server版本的标记。预期的结果将解释你所说的“将第三栏重设为100”的意思。谢谢我更新了我的帖子哦,太好了!这带来了巨大的变化谢谢你。我不知道第一个值function@Gaetan56我强烈建议您花一些时间阅读窗口函数,它们可以有效地解决许多问题
+------------+-------------------+----------+------------------+
| valueDate  | benchmarkTypeName | NAVLocal | NAVLocal rebased |
| 2016-11-30 | Benchmark         | 3005.969 | 100              |
| 2016-12-01 | Benchmark         | 2994.498 | 99.6183          |
| 2016-12-02 | Benchmark         | 2981.919 | 99.1999          |
| 2016-12-05 | Benchmark         | 2981.438 | 99.1839          |
| 2016-12-07 | Benchmark         | 3020.056 | 100.4686         |
| 2016-12-09 | Benchmark         | 3110.806 | 103.4876         |
| 2016-12-12 | Benchmark         | 3086.448 | 102.6773         |
| 2016-12-13 | Benchmark         | 3097.514 | 103.0454         |
| 2016-12-14 | Benchmark         | 3069.051 | 102.0985         |
| 2016-12-15 | Benchmark         | 3151.476 | 104.8406         |
| 2016-12-16 | Benchmark         | 3147.683 | 104.7144         |
| 2016-12-19 | Benchmark         | 3145.644 | 104.6465         |
| 2016-12-20 | Benchmark         | 3175.352 | 105.6348         |
| 2016-12-21 | Benchmark         | 3150.925 | 104.8222         |
| 2016-12-22 | Benchmark         | 3138.262 | 104.401          |
| 2016-12-23 | Benchmark         | 3140.907 | 104.489          |
| 2016-12-28 | Benchmark         | 3142.341 | 104.5367         |
| 2016-12-29 | Benchmark         | 3112.916 | 103.5578         |
| 2016-12-30 | Benchmark         | 3081.546 | 102.5142         |
| 2017-01-03 | Benchmark         | 3156.683 | 105.0138         |
| 2017-01-04 | Benchmark         | 3147.517 | 104.7088         |
| 2017-01-05 | Benchmark         | 3108.027 | 103.3951         |
| 2017-01-09 | Benchmark         | 3121.824 | 103.8541         |
| 2017-01-10 | Benchmark         | 3111.075 | 103.4965         |
| 2017-01-11 | Benchmark         | 3156.886 | 105.0205         |
| 2017-01-12 | Benchmark         | 3095.468 | 102.9773         |
| 2017-01-13 | Benchmark         | 3109.505 | 103.4443         |
| 2017-01-16 | Benchmark         | 3109.505 | 103.4443         |
| 2017-01-17 | Benchmark         | 3080.419 | 102.4767         |
| 2017-01-18 | Benchmark         | 3086.207 | 102.6692         |
| 2017-01-19 | Benchmark         | 3098.868 | 103.0904         |
| 2017-01-20 | Benchmark         | 3089.861 | 102.7908         |
| 2017-01-23 | Benchmark         | 3062.108 | 101.8675         |
| 2017-01-24 | Benchmark         | 3079.78  | 102.4554         |
| 2017-01-25 | Benchmark         | 3108.255 | 103.4027         |
| 2017-01-26 | Benchmark         | 3127.415 | 104.0401         |
| 2017-01-27 | Benchmark         | 3114.021 | 103.5945         |
| 2017-01-30 | Benchmark         | 3099.602 | 103.1149         |
| 2017-01-31 | Benchmark         | 3063.617 | 101.9177         |
| 2016-11-30 | Fund              | 280.773  | 100              |
| 2016-12-01 | Fund              | 279.075  | 99.3952          |
| 2016-12-02 | Fund              | 278.431  | 99.1658          |
| 2016-12-05 | Fund              | 279.704  | 99.6192          |
| 2016-12-07 | Fund              | 284.042  | 101.1642         |
| 2016-12-09 | Fund              | 290.476  | 103.4558         |
| 2016-12-12 | Fund              | 289.819  | 103.2218         |
| 2016-12-13 | Fund              | 292.155  | 104.0538         |
| 2016-12-14 | Fund              | 290.95   | 103.6246         |
| 2016-12-15 | Fund              | 291.622  | 103.8639         |
| 2016-12-16 | Fund              | 292.257  | 104.0901         |
| 2016-12-19 | Fund              | 293.073  | 104.3807         |
| 2016-12-20 | Fund              | 294.237  | 104.7953         |
| 2016-12-21 | Fund              | 293.813  | 104.6443         |
| 2016-12-22 | Fund              | 292.814  | 104.2885         |
| 2016-12-23 | Fund              | 293.084  | 104.3846         |
| 2016-12-28 | Fund              | 294.895  | 105.0296         |
| 2016-12-29 | Fund              | 294.22   | 104.7892         |
| 2016-12-30 | Fund              | 295.241  | 105.1529         |
| 2017-01-03 | Fund              | 296.374  | 105.5564         |
| 2017-01-04 | Fund              | 294.599  | 104.9242         |
| 2017-01-05 | Fund              | 295.307  | 105.1764         |
| 2017-01-09 | Fund              | 294.184  | 104.7764         |
| 2017-01-10 | Fund              | 294.421  | 104.8608         |
| 2017-01-11 | Fund              | 294.967  | 105.0553         |
| 2017-01-12 | Fund              | 293.688  | 104.5998         |
| 2017-01-13 | Fund              | 295.943  | 105.4029         |
| 2017-01-16 | Fund              | 294.739  | 104.9741         |
| 2017-01-17 | Fund              | 294.243  | 104.7974         |
| 2017-01-18 | Fund              | 295.486  | 105.2401         |
| 2017-01-19 | Fund              | 294.833  | 105.0076         |
| 2017-01-20 | Fund              | 294.298  | 104.817          |
| 2017-01-23 | Fund              | 293.808  | 104.6425         |
| 2017-01-24 | Fund              | 294.641  | 104.9392         |
| 2017-01-25 | Fund              | 296.766  | 105.696          |
| 2017-01-26 | Fund              | 297.378  | 105.914          |
| 2017-01-27 | Fund              | 297.269  | 105.8752         |
| 2017-01-30 | Fund              | 294.678  | 104.9523         |
| 2017-01-31 | Fund              | 292.997  | 104.3536         |
+------------+-------------------+----------+------------------+
USE
tempdb
GO

DROP TABLE IF EXISTS Rebase;
CREATE TABLE Rebase(
   valueDate         DATE  NOT NULL
  ,benchmarkTypeName VARCHAR(9) NOT NULL
  ,NAVLocal          NUMERIC(8,3) NOT NULL
);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-11-30','Benchmark',3005.969);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-01','Benchmark',2994.498);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-02','Benchmark',2981.919);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-05','Benchmark',2981.438);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-07','Benchmark',3020.056);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-09','Benchmark',3110.806);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-12','Benchmark',3086.448);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-13','Benchmark',3097.514);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-14','Benchmark',3069.051);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-15','Benchmark',3151.476);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-16','Benchmark',3147.683);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-19','Benchmark',3145.644);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-20','Benchmark',3175.352);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-21','Benchmark',3150.925);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-22','Benchmark',3138.262);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-23','Benchmark',3140.907);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-28','Benchmark',3142.341);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-29','Benchmark',3112.916);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-30','Benchmark',3081.546);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-03','Benchmark',3156.683);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-04','Benchmark',3147.517);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-05','Benchmark',3108.027);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-09','Benchmark',3121.824);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-10','Benchmark',3111.075);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-11','Benchmark',3156.886);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-12','Benchmark',3095.468);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-13','Benchmark',3109.505);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-16','Benchmark',3109.505);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-17','Benchmark',3080.419);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-18','Benchmark',3086.207);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-19','Benchmark',3098.868);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-20','Benchmark',3089.861);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-23','Benchmark',3062.108);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-24','Benchmark',3079.78);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-25','Benchmark',3108.255);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-26','Benchmark',3127.415);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-27','Benchmark',3114.021);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-30','Benchmark',3099.602);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-31','Benchmark',3063.617);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-11-30','Fund',280.773);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-01','Fund',279.075);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-02','Fund',278.431);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-05','Fund',279.704);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-07','Fund',284.042);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-09','Fund',290.476);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-12','Fund',289.819);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-13','Fund',292.155);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-14','Fund',290.95);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-15','Fund',291.622);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-16','Fund',292.257);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-19','Fund',293.073);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-20','Fund',294.237);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-21','Fund',293.813);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-22','Fund',292.814);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-23','Fund',293.084);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-28','Fund',294.895);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-29','Fund',294.22);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2016-12-30','Fund',295.241);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-03','Fund',296.374);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-04','Fund',294.599);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-05','Fund',295.307);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-09','Fund',294.184);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-10','Fund',294.421);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-11','Fund',294.967);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-12','Fund',293.688);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-13','Fund',295.943);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-16','Fund',294.739);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-17','Fund',294.243);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-18','Fund',295.486);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-19','Fund',294.833);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-20','Fund',294.298);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-23','Fund',293.808);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-24','Fund',294.641);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-25','Fund',296.766);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-26','Fund',297.378);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-27','Fund',297.269);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-30','Fund',294.678);
INSERT INTO Rebase(valueDate,benchmarkTypeName,NAVLocal) VALUES ('2017-01-31','Fund',292.997);


SELECT
    valueDate
,   benchmarkTypeName
,   NAVLocal
,   FIRST_VALUE(NAVLocal) OVER(PARTITION BY benchmarkTypeName ORDER BY valueDate) AS Oldest
,   (NAVLOCAL / FIRST_VALUE(NAVLocal) OVER(PARTITION BY benchmarkTypeName ORDER BY valueDate)) * 100 aS RebaseValue

FROM
    Rebase