]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add support for window function first_value().
authordan <dan@noemail.net>
Thu, 7 Jun 2018 17:45:22 +0000 (17:45 +0000)
committerdan <dan@noemail.net>
Thu, 7 Jun 2018 17:45:22 +0000 (17:45 +0000)
FossilOrigin-Name: 060b26402880daab085ad01f5f0dbde957c7a22cd219be5b8ec94fba883051a0

manifest
manifest.uuid
src/window.c
test/window3.tcl
test/window3.test

index 4138e928f909a9294c0a9e042a17190087b8d285..e66ca94c15104c1ee10f6c76425c8f972472d8e2 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sproblems\swith\sthe\snth_value()\sfunction.
-D 2018-06-07T15:54:26.149
+C Add\ssupport\sfor\swindow\sfunction\sfirst_value().
+D 2018-06-07T17:45:22.248
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F Makefile.in bfc40f350586923e0419d2ea4b559c37ec10ee4b6e210e08c14401f8e340f0da
@@ -583,7 +583,7 @@ F src/where.c 60ec752fcbe9f9e0271ac60548d159a540a1ee47a4f9fedc85e88a3d0e392dd1
 F src/whereInt.h cbae2bcd37cfebdb7812a8b188cdb19634ced2b9346470d1c270556b0c33ea53
 F src/wherecode.c 728c7f70731430ccdac807a79969873e1af6968bf1c4745dff3f9dd35f636cc8
 F src/whereexpr.c e90b2e76dcabc81edff56633bf281bc01d93b71e0c81482dc06925ce39f5844a
-F src/window.c 7a79e54c37ebe54aba9106f8450c62cdeab487bfc31d5510ac3a4a96ab695e41
+F src/window.c c48dd2d726123532f37d88084119e832ade7f61e4d7ce6a8e9c9b4125f7e6040
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
 F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
 F test/affinity3.test 6a101af2fc945ce2912f6fe54dd646018551710d
@@ -1619,8 +1619,8 @@ F test/win32nolock.test ac4f08811a562e45a5755e661f45ca85892bdbbc
 F test/window1.test 905fe0842eacfd61e2f30ef7b0a84a7325ffa5cbbcd717ca30f25a142c3bca90
 F test/window2.tcl 0983de5eade5eeda49469244799d5331bfe3199fca3f6c6d2a836aa08f4fba1b
 F test/window2.test 79747b2edde4ad424e0752b27529aedc86e91f3d8d88846fa17ff0cb67f65086
-F test/window3.tcl 81e74f1462e6ec0cd85c0435618202eb2beec312239d2178cb7ff7c8f9fe8374
-F test/window3.test 82e43e194ee1f59d42e0ce3d18d06c65aaec6d583eb68839ed7ee903ddc55d6d
+F test/window3.tcl 4941d89c74dd12a3d0fa74548887a98cf101b2707b2fe5cb77581197f5074025
+F test/window3.test 4962a83e7f6ad1b5c8538424b4f9797513ab16d78777cd156c2744e402d63d90
 F test/window4.tcl 23918c0c0e3da95087c5993fab4f049962aec3576f9cc158e37faf7dead0351e
 F test/window4.test 0d89f694ffa9857e22b48e4b50a2d5284288c852eb1947a868b51af937b2b9ac
 F test/with1.test 58475190cd8caaeebea8cfeb2a264ec97a0c492b8ffe9ad20cefbb23df462f96
@@ -1739,7 +1739,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P eb1fb420ac70857e7ca4cbad78be15a27bee8f915ba2da080c7efa1879c06c31
-R 2c2ca975db91292e07722982d19a6d3d
+P 63002b9a090397668b94fe341a035c42f84e4837af85395bce4cd1c2777c5209
+R f143e70c0a392b68a47207212ca0721c
 U dan
-Z 07280d595e477b70f467bbf008f0b04e
+Z 4ef45732bba3ef90b00747173eba3b6a
index f03acc7ff57eebfaa103eaf94a67bd63eeefd275..bb183af53221f5e06b31610d1e3afe87c83d207c 100644 (file)
@@ -1 +1 @@
-63002b9a090397668b94fe341a035c42f84e4837af85395bce4cd1c2777c5209
\ No newline at end of file
+060b26402880daab085ad01f5f0dbde957c7a22cd219be5b8ec94fba883051a0
\ No newline at end of file
index 909decba36e811ab144b8da68f8f638e6d0031c3..50e37c5dbc3644933afbd1c9dcc2973f70b49437 100644 (file)
@@ -310,6 +310,21 @@ static void nth_valueInverseFunc(
 static void nth_valueValueFunc(sqlite3_context *pCtx){
 }
 
+static void first_valueStepFunc(
+  sqlite3_context *pCtx, 
+  int nArg,
+  sqlite3_value **apArg
+){
+}
+static void first_valueInverseFunc(
+  sqlite3_context *pCtx, 
+  int nArg,
+  sqlite3_value **apArg
+){
+}
+static void first_valueValueFunc(sqlite3_context *pCtx){
+}
+
 #define WINDOWFUNC(name,nArg,extra) {                                      \
   nArg, (SQLITE_UTF8|SQLITE_FUNC_WINDOW|extra), 0, 0,                      \
   name ## StepFunc, name ## ValueFunc, name ## ValueFunc,                  \
@@ -335,6 +350,7 @@ void sqlite3WindowFunctions(void){
     WINDOWFUNC(ntile, 1, SQLITE_FUNC_WINDOW_SIZE),
     WINDOWFUNCF(last_value, 1, 0),
     WINDOWFUNC(nth_value, 2, 0),
+    WINDOWFUNC(first_value, 1, 0),
   };
   sqlite3InsertBuiltinFuncs(aWindowFuncs, ArraySize(aWindowFuncs));
 }
@@ -634,7 +650,7 @@ static void windowAggInit(Parse *pParse, Window *pMWin){
       sqlite3VdbeAppendP4(v, pKeyInfo, P4_KEYINFO);
       sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1);
     }
-    else if( p->xSFunc==nth_valueStepFunc ){
+    else if( p->xSFunc==nth_valueStepFunc || p->xSFunc==first_valueStepFunc ){
       /* Allocate two registers at pWin->regApp. These will be used to
       ** store the start and end index of the current frame.  */
       assert( pMWin->iEphCsr );
@@ -726,7 +742,9 @@ static void windowAggStep(
         sqlite3VdbeJumpHere(v, sqlite3VdbeCurrentAddr(v)-2);
       }
     }else if( pWin->regApp ){
-      assert( pWin->pFunc->xSFunc==nth_valueStepFunc );
+      assert( pWin->pFunc->xSFunc==nth_valueStepFunc 
+           || pWin->pFunc->xSFunc==first_valueStepFunc 
+      );
       assert( bInverse==0 || bInverse==1 );
       sqlite3VdbeAddOp2(v, OP_AddImm, pWin->regApp+1-bInverse, 1);
     }else{
@@ -839,12 +857,19 @@ static void windowReturnOneRow(
   Window *pWin;
   for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
     FuncDef *pFunc = pWin->pFunc;
-    if( pFunc->xSFunc==nth_valueStepFunc ){
+    if( pFunc->xSFunc==nth_valueStepFunc 
+     || pFunc->xSFunc==first_valueStepFunc 
+    ){
       int csr = pWin->csrApp;
       int lbl = sqlite3VdbeMakeLabel(v);
       int tmpReg = sqlite3GetTempReg(pParse);
       sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult);
-      sqlite3VdbeAddOp3(v, OP_Column, pWin->iEphCsr, pWin->iArgCol+1, tmpReg);
+
+      if( pFunc->xSFunc==nth_valueStepFunc ){
+        sqlite3VdbeAddOp3(v, OP_Column, pWin->iEphCsr, pWin->iArgCol+1, tmpReg);
+      }else{
+        sqlite3VdbeAddOp2(v, OP_Integer, 1, tmpReg);
+      }
       sqlite3VdbeAddOp3(v, OP_Add, tmpReg, pWin->regApp, tmpReg);
       sqlite3VdbeAddOp3(v, OP_Gt, pWin->regApp+1, lbl, tmpReg);
       sqlite3VdbeAddOp3(v, OP_SeekRowid, csr, lbl, tmpReg);
@@ -887,7 +912,9 @@ static int windowInitAccum(Parse *pParse, Window *pMWin){
   for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
     sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum);
     nArg = MAX(nArg, pWin->nArg);
-    if( pWin->pFunc->xSFunc==nth_valueStepFunc ){
+    if( pWin->pFunc->xSFunc==nth_valueStepFunc
+     || pWin->pFunc->xSFunc==first_valueStepFunc 
+    ){
       sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp);
       sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1);
     }
@@ -1572,6 +1599,7 @@ void sqlite3WindowCodeStep(
     FuncDef *pFunc = pWin->pFunc;
     if( (pFunc->funcFlags & SQLITE_FUNC_WINDOW_SIZE)
      || (pFunc->xSFunc==nth_valueStepFunc)
+     || (pFunc->xSFunc==first_valueStepFunc)
     ){
       windowCodeCacheStep(pParse, p, pWInfo, regGosub, addrGosub);
       return;
index 81dc3eda9008250db76d8695acc2ab1277483e61..74f30b78889afe844d0ff8e8aff7ce5484316949 100644 (file)
@@ -223,6 +223,25 @@ foreach {tn window} {
   execsql_test 1.$tn.10.6 "
     SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 $window) FROM t2
   "
+
+  execsql_test 1.$tn.11.1 "
+    SELECT first_value(b) OVER (ORDER BY a $window) FROM t2
+  "
+  execsql_test 1.$tn.11.2 "
+    SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a $window) FROM t2
+  "
+  execsql_test 1.$tn.11.3 "
+    SELECT first_value(b) OVER ( ORDER BY b,a $window ) FROM t2
+  "
+  execsql_test 1.$tn.11.4 "
+    SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a $window ) FROM t2
+  "
+  execsql_test 1.$tn.11.5 "
+    SELECT first_value(b) OVER ( ORDER BY b%10,a $window ) FROM t2
+  "
+  execsql_test 1.$tn.11.6 "
+    SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 $window) FROM t2
+  "
 }
 
 finish_test
index 7a557a530f3f83ea778cb26541c6981982d5ddf1..1744a57dbd2a1e9653f4c768164c4c7877e9e599 100644 (file)
@@ -321,6 +321,30 @@ do_execsql_test 1.1.10.6 {
   SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2
 } {0   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}}
 
+do_execsql_test 1.1.11.1 {
+  SELECT first_value(b) OVER (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0}
+
+do_execsql_test 1.1.11.2 {
+  SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   38   38   38   38   38   38   38   38   38   38   38   38   38   38   38   38   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99}
+
+do_execsql_test 1.1.11.3 {
+  SELECT first_value(b) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0}
+
+do_execsql_test 1.1.11.4 {
+  SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9}
+
+do_execsql_test 1.1.11.5 {
+  SELECT first_value(b) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0}
+
+do_execsql_test 1.1.11.6 {
+  SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2
+} {0   74   74   26   2   96   38   68   62   46   6   46   78   54   8   84   16   16   86   74   24   12   32   56   22   90   28   56   40   56   16   36   98   76   4   94   42   30   78   2   80   84   72   58   96   98   74   12   8   20   22   88   34   8   34   90   96   60   44   2   74   70   26   26   80   90   36   58   72   72   66   64   12   14   62   36   34   36   58   52   30   50   84   10   84   44   58   30   38   34   82   41   23   99   33   89   81   59   39   91   99   97   27   97   67   29   93   77   23   93   65   35   47   7   61   91   85   85   43   59   3   91   55   15   89   25   47   1   43   75   89   81   33   29   53   63   87   37   41   9   61   73   95   65   13   1   21   65   35   5   73   11   51   87   41   31   31   15   95   73   79   11   49   59   55   75   77   7   85   57   29   59   19   39   47   47   9   33   93   75   81   9   23   37   13   91   91   33   15   99   3   95   69   33   21   39   83   27   17   7}
+
 do_execsql_test 1.2.2.1 {
   SELECT max(b) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2
 } {99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99}
@@ -585,6 +609,30 @@ do_execsql_test 1.2.10.6 {
   SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2
 } {0   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}}
 
+do_execsql_test 1.2.11.1 {
+  SELECT first_value(b) OVER (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0}
+
+do_execsql_test 1.2.11.2 {
+  SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   38   38   38   38   38   38   38   38   38   38   38   38   38   38   38   38   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99}
+
+do_execsql_test 1.2.11.3 {
+  SELECT first_value(b) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0}
+
+do_execsql_test 1.2.11.4 {
+  SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9}
+
+do_execsql_test 1.2.11.5 {
+  SELECT first_value(b) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0}
+
+do_execsql_test 1.2.11.6 {
+  SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2
+} {0   74   74   26   2   96   38   68   62   46   6   46   78   54   8   84   16   16   86   74   24   12   32   56   22   90   28   56   40   56   16   36   98   76   4   94   42   30   78   2   80   84   72   58   96   98   74   12   8   20   22   88   34   8   34   90   96   60   44   2   74   70   26   26   80   90   36   58   72   72   66   64   12   14   62   36   34   36   58   52   30   50   84   10   84   44   58   30   38   34   82   41   23   99   33   89   81   59   39   91   99   97   27   97   67   29   93   77   23   93   65   35   47   7   61   91   85   85   43   59   3   91   55   15   89   25   47   1   43   75   89   81   33   29   53   63   87   37   41   9   61   73   95   65   13   1   21   65   35   5   73   11   51   87   41   31   31   15   95   73   79   11   49   59   55   75   77   7   85   57   29   59   19   39   47   47   9   33   93   75   81   9   23   37   13   91   91   33   15   99   3   95   69   33   21   39   83   27   17   7}
+
 do_execsql_test 1.3.2.1 {
   SELECT max(b) OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW         AND CURRENT ROW ) FROM t2
 } {0   74   41   74   23   99   26   33   2   89   81   96   59   38   68   39   62   91   46   6   99   97   27   46   78   54   97   8   67   29   93   84   77   23   16   16   93   65   35   47   7   86   74   61   91   85   24   85   43   59   12   32   56   3   91   22   90   55   15   28   89   25   47   1   56   40   43   56   16   75   36   89   98   76   81   4   94   42   30   78   33   29   53   63   2   87   37   80   84   72   41   9   61   73   95   65   13   58   96   98   1   21   74   65   35   5   73   11   51   87   41   12   8   20   31   31   15   95   22   73   79   88   34   8   11   49   34   90   59   96   60   55   75   77   44   2   7   85   57   74   29   70   59   19   39   26   26   47   80   90   36   58   47   9   72   72   66   33   93   75   64   81   9   23   37   13   12   14   62   91   36   91   33   15   34   36   99   3   95   69   58   52   30   50   84   10   84   33   21   39   44   58   30   38   34   83   27   82   17   7}
@@ -849,6 +897,30 @@ do_execsql_test 1.3.10.6 {
   SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW         AND CURRENT ROW) FROM t2
 } {0   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}}
 
+do_execsql_test 1.3.11.1 {
+  SELECT first_value(b) OVER (ORDER BY a RANGE BETWEEN CURRENT ROW         AND CURRENT ROW) FROM t2
+} {0   74   41   74   23   99   26   33   2   89   81   96   59   38   68   39   62   91   46   6   99   97   27   46   78   54   97   8   67   29   93   84   77   23   16   16   93   65   35   47   7   86   74   61   91   85   24   85   43   59   12   32   56   3   91   22   90   55   15   28   89   25   47   1   56   40   43   56   16   75   36   89   98   76   81   4   94   42   30   78   33   29   53   63   2   87   37   80   84   72   41   9   61   73   95   65   13   58   96   98   1   21   74   65   35   5   73   11   51   87   41   12   8   20   31   31   15   95   22   73   79   88   34   8   11   49   34   90   59   96   60   55   75   77   44   2   7   85   57   74   29   70   59   19   39   26   26   47   80   90   36   58   47   9   72   72   66   33   93   75   64   81   9   23   37   13   12   14   62   91   36   91   33   15   34   36   99   3   95   69   58   52   30   50   84   10   84   33   21   39   44   58   30   38   34   83   27   82   17   7}
+
+do_execsql_test 1.3.11.2 {
+  SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW         AND CURRENT ROW) FROM t2
+} {0   90   40   30   80   20   90   60   70   80   90   30   50   10   30   41   81   91   61   91   91   1   81   41   61   1   21   11   51   41   31   31   11   81   91   91   21   2   62   12   32   22   42   2   72   12   22   2   72   72   12   62   52   82   23   33   93   23   93   43   3   43   33   53   63   73   13   73   73   33   93   23   13   33   3   33   83   74   74   54   84   74   24   4   94   84   74   34   34   44   74   64   14   34   84   84   44   34   65   35   85   85   55   15   25   75   95   65   65   35   5   15   95   55   75   85   75   15   95   26   96   46   6   46   16   16   86   56   56   56   16   36   76   96   96   26   26   36   66   36   36   97   27   97   67   77   47   7   47   87   37   87   77   7   57   47   47   37   27   17   7   38   68   78   8   28   98   78   58   98   8   88   8   58   58   58   38   99   89   59   39   99   29   59   89   89   29   9   79   49   59   29   59   19   39   9   9   99   69   39}
+
+do_execsql_test 1.3.11.3 {
+  SELECT first_value(b) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW         AND CURRENT ROW ) FROM t2
+} {0   1   1   2   2   2   3   3   4   5   6   7   7   7   8   8   8   9   9   9   10   11   11   12   12   12   13   13   14   15   15   15   16   16   16   17   19   20   21   21   22   22   23   23   23   24   25   26   26   26   27   27   28   29   29   29   30   30   30   31   31   32   33   33   33   33   33   34   34   34   34   35   35   36   36   36   36   37   37   38   38   39   39   39   40   41   41   41   42   43   43   44   44   46   46   47   47   47   47   49   50   51   52   53   54   55   55   56   56   56   57   58   58   58   58   59   59   59   59   60   61   61   62   62   63   64   65   65   65   66   67   68   69   70   72   72   72   73   73   73   74   74   74   74   74   75   75   75   76   77   77   78   78   79   80   80   81   81   81   82   83   84   84   84   84   85   85   85   86   87   87   88   89   89   89   90   90   90   91   91   91   91   91   93   93   93   94   95   95   95   96   96   96   97   97   98   98   99   99   99}
+
+do_execsql_test 1.3.11.4 {
+  SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW         AND CURRENT ROW ) FROM t2
+} {0   10   20   30   30   30   40   50   60   70   80   80   90   90   90   1   1   11   11   21   21   31   31   41   41   41   51   61   61   81   81   81   91   91   91   91   91   2   2   2   12   12   12   22   22   32   42   52   62   62   72   72   72   82   3   3   13   13   23   23   23   33   33   33   33   33   43   43   53   63   73   73   73   83   93   93   93   4   14   24   34   34   34   34   44   44   54   64   74   74   74   74   74   84   84   84   84   94   5   15   15   15   25   35   35   55   55   65   65   65   75   75   75   85   85   85   95   95   95   6   16   16   16   26   26   26   36   36   36   36   46   46   56   56   56   66   76   86   96   96   96   7   7   7   17   27   27   37   37   47   47   47   47   57   67   77   77   87   87   97   97   8   8   8   28   38   38   58   58   58   58   68   78   78   88   98   98   9   9   9   19   29   29   29   39   39   39   49   59   59   59   59   69   79   89   89   89   99   99   99}
+
+do_execsql_test 1.3.11.5 {
+  SELECT first_value(b) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW         AND CURRENT ROW ) FROM t2
+} {0   90   40   30   80   20   90   60   70   80   90   30   50   10   30   41   81   91   61   91   91   1   81   41   61   1   21   11   51   41   31   31   11   81   91   91   21   2   62   12   32   22   42   2   72   12   22   2   72   72   12   62   52   82   23   33   93   23   93   43   3   43   33   53   63   73   13   73   73   33   93   23   13   33   3   33   83   74   74   54   84   74   24   4   94   84   74   34   34   44   74   64   14   34   84   84   44   34   65   35   85   85   55   15   25   75   95   65   65   35   5   15   95   55   75   85   75   15   95   26   96   46   6   46   16   16   86   56   56   56   16   36   76   96   96   26   26   36   66   36   36   97   27   97   67   77   47   7   47   87   37   87   77   7   57   47   47   37   27   17   7   38   68   78   8   28   98   78   58   98   8   88   8   58   58   58   38   99   89   59   39   99   29   59   89   89   29   9   79   49   59   29   59   19   39   9   9   99   69   39}
+
+do_execsql_test 1.3.11.6 {
+  SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW         AND CURRENT ROW) FROM t2
+} {0   74   74   26   2   96   38   68   62   46   6   46   78   54   8   84   16   16   86   74   24   12   32   56   22   90   28   56   40   56   16   36   98   76   4   94   42   30   78   2   80   84   72   58   96   98   74   12   8   20   22   88   34   8   34   90   96   60   44   2   74   70   26   26   80   90   36   58   72   72   66   64   12   14   62   36   34   36   58   52   30   50   84   10   84   44   58   30   38   34   82   41   23   99   33   89   81   59   39   91   99   97   27   97   67   29   93   77   23   93   65   35   47   7   61   91   85   85   43   59   3   91   55   15   89   25   47   1   43   75   89   81   33   29   53   63   87   37   41   9   61   73   95   65   13   1   21   65   35   5   73   11   51   87   41   31   31   15   95   73   79   11   49   59   55   75   77   7   85   57   29   59   19   39   47   47   9   33   93   75   81   9   23   37   13   91   91   33   15   99   3   95   69   33   21   39   83   27   17   7}
+
 do_execsql_test 1.4.2.1 {
   SELECT max(b) OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW         AND UNBOUNDED FOLLOWING ) FROM t2
 } {99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   95   95   84   84   84   84   84   84   84   84   83   83   83   83   83   83   83   83   83   82   82   17   7}
@@ -1113,6 +1185,30 @@ do_execsql_test 1.4.10.6 {
   SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW         AND UNBOUNDED FOLLOWING) FROM t2
 } {0   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}}
 
+do_execsql_test 1.4.11.1 {
+  SELECT first_value(b) OVER (ORDER BY a RANGE BETWEEN CURRENT ROW         AND UNBOUNDED FOLLOWING) FROM t2
+} {0   74   41   74   23   99   26   33   2   89   81   96   59   38   68   39   62   91   46   6   99   97   27   46   78   54   97   8   67   29   93   84   77   23   16   16   93   65   35   47   7   86   74   61   91   85   24   85   43   59   12   32   56   3   91   22   90   55   15   28   89   25   47   1   56   40   43   56   16   75   36   89   98   76   81   4   94   42   30   78   33   29   53   63   2   87   37   80   84   72   41   9   61   73   95   65   13   58   96   98   1   21   74   65   35   5   73   11   51   87   41   12   8   20   31   31   15   95   22   73   79   88   34   8   11   49   34   90   59   96   60   55   75   77   44   2   7   85   57   74   29   70   59   19   39   26   26   47   80   90   36   58   47   9   72   72   66   33   93   75   64   81   9   23   37   13   12   14   62   91   36   91   33   15   34   36   99   3   95   69   58   52   30   50   84   10   84   33   21   39   44   58   30   38   34   83   27   82   17   7}
+
+do_execsql_test 1.4.11.2 {
+  SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW         AND UNBOUNDED FOLLOWING) FROM t2
+} {0   90   40   30   80   20   90   60   70   80   90   30   50   10   30   41   81   91   61   91   91   1   81   41   61   1   21   11   51   41   31   31   11   81   91   91   21   2   62   12   32   22   42   2   72   12   22   2   72   72   12   62   52   82   23   33   93   23   93   43   3   43   33   53   63   73   13   73   73   33   93   23   13   33   3   33   83   74   74   54   84   74   24   4   94   84   74   34   34   44   74   64   14   34   84   84   44   34   65   35   85   85   55   15   25   75   95   65   65   35   5   15   95   55   75   85   75   15   95   26   96   46   6   46   16   16   86   56   56   56   16   36   76   96   96   26   26   36   66   36   36   97   27   97   67   77   47   7   47   87   37   87   77   7   57   47   47   37   27   17   7   38   68   78   8   28   98   78   58   98   8   88   8   58   58   58   38   99   89   59   39   99   29   59   89   89   29   9   79   49   59   29   59   19   39   9   9   99   69   39}
+
+do_execsql_test 1.4.11.3 {
+  SELECT first_value(b) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW         AND UNBOUNDED FOLLOWING ) FROM t2
+} {0   1   1   2   2   2   3   3   4   5   6   7   7   7   8   8   8   9   9   9   10   11   11   12   12   12   13   13   14   15   15   15   16   16   16   17   19   20   21   21   22   22   23   23   23   24   25   26   26   26   27   27   28   29   29   29   30   30   30   31   31   32   33   33   33   33   33   34   34   34   34   35   35   36   36   36   36   37   37   38   38   39   39   39   40   41   41   41   42   43   43   44   44   46   46   47   47   47   47   49   50   51   52   53   54   55   55   56   56   56   57   58   58   58   58   59   59   59   59   60   61   61   62   62   63   64   65   65   65   66   67   68   69   70   72   72   72   73   73   73   74   74   74   74   74   75   75   75   76   77   77   78   78   79   80   80   81   81   81   82   83   84   84   84   84   85   85   85   86   87   87   88   89   89   89   90   90   90   91   91   91   91   91   93   93   93   94   95   95   95   96   96   96   97   97   98   98   99   99   99}
+
+do_execsql_test 1.4.11.4 {
+  SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW         AND UNBOUNDED FOLLOWING ) FROM t2
+} {0   10   20   30   30   30   40   50   60   70   80   80   90   90   90   1   1   11   11   21   21   31   31   41   41   41   51   61   61   81   81   81   91   91   91   91   91   2   2   2   12   12   12   22   22   32   42   52   62   62   72   72   72   82   3   3   13   13   23   23   23   33   33   33   33   33   43   43   53   63   73   73   73   83   93   93   93   4   14   24   34   34   34   34   44   44   54   64   74   74   74   74   74   84   84   84   84   94   5   15   15   15   25   35   35   55   55   65   65   65   75   75   75   85   85   85   95   95   95   6   16   16   16   26   26   26   36   36   36   36   46   46   56   56   56   66   76   86   96   96   96   7   7   7   17   27   27   37   37   47   47   47   47   57   67   77   77   87   87   97   97   8   8   8   28   38   38   58   58   58   58   68   78   78   88   98   98   9   9   9   19   29   29   29   39   39   39   49   59   59   59   59   69   79   89   89   89   99   99   99}
+
+do_execsql_test 1.4.11.5 {
+  SELECT first_value(b) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW         AND UNBOUNDED FOLLOWING ) FROM t2
+} {0   90   40   30   80   20   90   60   70   80   90   30   50   10   30   41   81   91   61   91   91   1   81   41   61   1   21   11   51   41   31   31   11   81   91   91   21   2   62   12   32   22   42   2   72   12   22   2   72   72   12   62   52   82   23   33   93   23   93   43   3   43   33   53   63   73   13   73   73   33   93   23   13   33   3   33   83   74   74   54   84   74   24   4   94   84   74   34   34   44   74   64   14   34   84   84   44   34   65   35   85   85   55   15   25   75   95   65   65   35   5   15   95   55   75   85   75   15   95   26   96   46   6   46   16   16   86   56   56   56   16   36   76   96   96   26   26   36   66   36   36   97   27   97   67   77   47   7   47   87   37   87   77   7   57   47   47   37   27   17   7   38   68   78   8   28   98   78   58   98   8   88   8   58   58   58   38   99   89   59   39   99   29   59   89   89   29   9   79   49   59   29   59   19   39   9   9   99   69   39}
+
+do_execsql_test 1.4.11.6 {
+  SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW         AND UNBOUNDED FOLLOWING) FROM t2
+} {0   74   74   26   2   96   38   68   62   46   6   46   78   54   8   84   16   16   86   74   24   12   32   56   22   90   28   56   40   56   16   36   98   76   4   94   42   30   78   2   80   84   72   58   96   98   74   12   8   20   22   88   34   8   34   90   96   60   44   2   74   70   26   26   80   90   36   58   72   72   66   64   12   14   62   36   34   36   58   52   30   50   84   10   84   44   58   30   38   34   82   41   23   99   33   89   81   59   39   91   99   97   27   97   67   29   93   77   23   93   65   35   47   7   61   91   85   85   43   59   3   91   55   15   89   25   47   1   43   75   89   81   33   29   53   63   87   37   41   9   61   73   95   65   13   1   21   65   35   5   73   11   51   87   41   31   31   15   95   73   79   11   49   59   55   75   77   7   85   57   29   59   19   39   47   47   9   33   93   75   81   9   23   37   13   91   91   33   15   99   3   95   69   33   21   39   83   27   17   7}
+
 do_execsql_test 1.5.2.1 {
   SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2
 } {{}   {}   {}   {}   0   74   74   74   74   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99}
@@ -1377,6 +1473,30 @@ do_execsql_test 1.5.10.6 {
   SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2
 } {{}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}}
 
+do_execsql_test 1.5.11.1 {
+  SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2
+} {{}   {}   {}   {}   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0}
+
+do_execsql_test 1.5.11.2 {
+  SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2
+} {{}   {}   {}   {}   0   0   0   0   0   0   0   0   0   0   0   {}   {}   {}   {}   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   {}   {}   {}   {}   2   2   2   2   2   2   2   2   2   2   2   2   2   {}   {}   {}   {}   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   {}   {}   {}   {}   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   {}   {}   {}   {}   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   {}   {}   {}   {}   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   {}   {}   {}   {}   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   {}   {}   {}   {}   38   38   38   38   38   38   38   38   38   38   38   38   {}   {}   {}   {}   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99}
+
+do_execsql_test 1.5.11.3 {
+  SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2
+} {{}   {}   {}   {}   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0}
+
+do_execsql_test 1.5.11.4 {
+  SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2
+} {{}   {}   {}   {}   0   0   0   0   0   0   0   0   0   0   0   {}   {}   {}   {}   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   {}   {}   {}   {}   2   2   2   2   2   2   2   2   2   2   2   2   2   {}   {}   {}   {}   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   {}   {}   {}   {}   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   {}   {}   {}   {}   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   {}   {}   {}   {}   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   {}   {}   {}   {}   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   {}   {}   {}   {}   8   8   8   8   8   8   8   8   8   8   8   8   {}   {}   {}   {}   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9}
+
+do_execsql_test 1.5.11.5 {
+  SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2
+} {{}   {}   {}   {}   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0}
+
+do_execsql_test 1.5.11.6 {
+  SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2
+} {{}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}}
+
 do_execsql_test 1.6.2.1 {
   SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING    AND 2 PRECEDING ) FROM t2
 } {{}   {}   0   74   74   74   74   99   99   99   33   89   89   96   96   96   68   68   68   91   91   91   99   99   99   97   78   78   97   97   97   67   93   93   93   84   77   23   93   93   93   65   47   86   86   86   91   91   91   85   85   85   59   59   56   56   91   91   91   90   90   55   89   89   89   47   56   56   56   56   56   75   75   89   98   98   98   81   94   94   94   78   78   78   53   63   63   87   87   87   84   84   84   72   61   73   95   95   95   65   96   98   98   98   74   74   74   65   73   73   73   87   87   87   41   20   31   31   31   95   95   95   79   88   88   88   34   49   49   90   90   96   96   96   75   77   77   77   44   85   85   85   74   74   70   70   59   39   39   47   80   90   90   90   58   58   72   72   72   72   93   93   93   81   81   81   37   37   37   14   62   91   91   91   91   91   34   36   99   99   99   95   95   69   58   52   84   84   84   84   84   39   44   58   58   58   38   83   83   83}
@@ -1641,6 +1761,30 @@ do_execsql_test 1.6.10.6 {
   SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING    AND 2 PRECEDING) FROM t2
 } {{}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}}
 
+do_execsql_test 1.6.11.1 {
+  SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING    AND 2 PRECEDING) FROM t2
+} {{}   {}   0   0   0   74   41   74   23   99   26   33   2   89   81   96   59   38   68   39   62   91   46   6   99   97   27   46   78   54   97   8   67   29   93   84   77   23   16   16   93   65   35   47   7   86   74   61   91   85   24   85   43   59   12   32   56   3   91   22   90   55   15   28   89   25   47   1   56   40   43   56   16   75   36   89   98   76   81   4   94   42   30   78   33   29   53   63   2   87   37   80   84   72   41   9   61   73   95   65   13   58   96   98   1   21   74   65   35   5   73   11   51   87   41   12   8   20   31   31   15   95   22   73   79   88   34   8   11   49   34   90   59   96   60   55   75   77   44   2   7   85   57   74   29   70   59   19   39   26   26   47   80   90   36   58   47   9   72   72   66   33   93   75   64   81   9   23   37   13   12   14   62   91   36   91   33   15   34   36   99   3   95   69   58   52   30   50   84   10   84   33   21   39   44   58   30   38   34   83}
+
+do_execsql_test 1.6.11.2 {
+  SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING    AND 2 PRECEDING) FROM t2
+} {{}   {}   0   0   0   90   40   30   80   20   90   60   70   80   90   {}   {}   41   41   41   81   91   61   91   91   1   81   41   61   1   21   11   51   41   31   31   11   {}   {}   2   2   2   62   12   32   22   42   2   72   12   22   2   72   72   {}   {}   23   23   23   33   93   23   93   43   3   43   33   53   63   73   13   73   73   33   93   23   13   {}   {}   74   74   74   74   54   84   74   24   4   94   84   74   34   34   44   74   64   14   34   {}   {}   65   65   65   35   85   85   55   15   25   75   95   65   65   35   5   15   95   55   75   {}   {}   26   26   26   96   46   6   46   16   16   86   56   56   56   16   36   76   96   96   26   26   {}   {}   97   97   97   27   97   67   77   47   7   47   87   37   87   77   7   57   47   47   {}   {}   38   38   38   68   78   8   28   98   78   58   98   8   88   8   {}   {}   99   99   99   89   59   39   99   29   59   89   89   29   9   79   49   59   29   59   19   39   9}
+
+do_execsql_test 1.6.11.3 {
+  SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING    AND 2 PRECEDING ) FROM t2
+} {{}   {}   0   0   0   1   1   2   2   2   3   3   4   5   6   7   7   7   8   8   8   9   9   9   10   11   11   12   12   12   13   13   14   15   15   15   16   16   16   17   19   20   21   21   22   22   23   23   23   24   25   26   26   26   27   27   28   29   29   29   30   30   30   31   31   32   33   33   33   33   33   34   34   34   34   35   35   36   36   36   36   37   37   38   38   39   39   39   40   41   41   41   42   43   43   44   44   46   46   47   47   47   47   49   50   51   52   53   54   55   55   56   56   56   57   58   58   58   58   59   59   59   59   60   61   61   62   62   63   64   65   65   65   66   67   68   69   70   72   72   72   73   73   73   74   74   74   74   74   75   75   75   76   77   77   78   78   79   80   80   81   81   81   82   83   84   84   84   84   85   85   85   86   87   87   88   89   89   89   90   90   90   91   91   91   91   91   93   93   93   94   95   95   95   96   96   96   97   97   98}
+
+do_execsql_test 1.6.11.4 {
+  SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING    AND 2 PRECEDING ) FROM t2
+} {{}   {}   0   0   0   10   20   30   30   30   40   50   60   70   80   {}   {}   1   1   1   1   11   11   21   21   31   31   41   41   41   51   61   61   81   81   81   91   {}   {}   2   2   2   2   2   12   12   12   22   22   32   42   52   62   62   {}   {}   3   3   3   3   13   13   23   23   23   33   33   33   33   33   43   43   53   63   73   73   73   {}   {}   4   4   4   14   24   34   34   34   34   44   44   54   64   74   74   74   74   74   84   {}   {}   5   5   5   15   15   15   25   35   35   55   55   65   65   65   75   75   75   85   85   {}   {}   6   6   6   16   16   16   26   26   26   36   36   36   36   46   46   56   56   56   66   76   {}   {}   7   7   7   7   7   17   27   27   37   37   47   47   47   47   57   67   77   77   {}   {}   8   8   8   8   8   28   38   38   58   58   58   58   68   78   {}   {}   9   9   9   9   9   19   29   29   29   39   39   39   49   59   59   59   59   69   79   89   89}
+
+do_execsql_test 1.6.11.5 {
+  SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING    AND 2 PRECEDING ) FROM t2
+} {{}   {}   0   0   0   90   40   30   80   20   90   60   70   80   90   30   50   10   30   41   81   91   61   91   91   1   81   41   61   1   21   11   51   41   31   31   11   81   91   91   21   2   62   12   32   22   42   2   72   12   22   2   72   72   12   62   52   82   23   33   93   23   93   43   3   43   33   53   63   73   13   73   73   33   93   23   13   33   3   33   83   74   74   54   84   74   24   4   94   84   74   34   34   44   74   64   14   34   84   84   44   34   65   35   85   85   55   15   25   75   95   65   65   35   5   15   95   55   75   85   75   15   95   26   96   46   6   46   16   16   86   56   56   56   16   36   76   96   96   26   26   36   66   36   36   97   27   97   67   77   47   7   47   87   37   87   77   7   57   47   47   37   27   17   7   38   68   78   8   28   98   78   58   98   8   88   8   58   58   58   38   99   89   59   39   99   29   59   89   89   29   9   79   49   59   29   59   19   39   9}
+
+do_execsql_test 1.6.11.6 {
+  SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING    AND 2 PRECEDING) FROM t2
+} {{}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}}
+
 do_execsql_test 1.7.2.1 {
   SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2
 } {0   74   74   74   74   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99}
@@ -1905,6 +2049,30 @@ do_execsql_test 1.7.10.6 {
   SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2
 } {0   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}}
 
+do_execsql_test 1.7.11.1 {
+  SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0}
+
+do_execsql_test 1.7.11.2 {
+  SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   38   38   38   38   38   38   38   38   38   38   38   38   38   38   38   38   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99}
+
+do_execsql_test 1.7.11.3 {
+  SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0}
+
+do_execsql_test 1.7.11.4 {
+  SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9}
+
+do_execsql_test 1.7.11.5 {
+  SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0}
+
+do_execsql_test 1.7.11.6 {
+  SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2
+} {0   74   74   26   2   96   38   68   62   46   6   46   78   54   8   84   16   16   86   74   24   12   32   56   22   90   28   56   40   56   16   36   98   76   4   94   42   30   78   2   80   84   72   58   96   98   74   12   8   20   22   88   34   8   34   90   96   60   44   2   74   70   26   26   80   90   36   58   72   72   66   64   12   14   62   36   34   36   58   52   30   50   84   10   84   44   58   30   38   34   82   41   23   99   33   89   81   59   39   91   99   97   27   97   67   29   93   77   23   93   65   35   47   7   61   91   85   85   43   59   3   91   55   15   89   25   47   1   43   75   89   81   33   29   53   63   87   37   41   9   61   73   95   65   13   1   21   65   35   5   73   11   51   87   41   31   31   15   95   73   79   11   49   59   55   75   77   7   85   57   29   59   19   39   47   47   9   33   93   75   81   9   23   37   13   91   91   33   15   99   3   95   69   33   21   39   83   27   17   7}
+
 do_execsql_test 1.8.2.1 {
   SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING    AND CURRENT ROW ) FROM t2
 } {0   74   74   74   74   99   99   99   99   99   89   96   96   96   96   96   68   91   91   91   99   99   99   99   99   97   97   97   97   97   97   93   93   93   93   84   93   93   93   93   93   86   86   86   91   91   91   91   91   85   85   85   59   59   91   91   91   91   91   90   90   89   89   89   89   56   56   56   56   75   75   89   98   98   98   98   98   94   94   94   94   78   78   78   63   87   87   87   87   87   84   84   84   73   95   95   95   95   96   98   98   98   98   98   74   74   74   73   73   87   87   87   87   87   41   31   31   95   95   95   95   95   88   88   88   88   49   90   90   96   96   96   96   96   77   77   77   85   85   85   85   85   74   74   70   70   59   47   80   90   90   90   90   90   72   72   72   72   93   93   93   93   93   81   81   81   37   37   62   91   91   91   91   91   91   91   99   99   99   99   99   95   95   69   84   84   84   84   84   84   84   58   58   58   58   83   83   83   83   83}
@@ -2169,6 +2337,30 @@ do_execsql_test 1.8.10.6 {
   SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING    AND CURRENT ROW) FROM t2
 } {0   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}}
 
+do_execsql_test 1.8.11.1 {
+  SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING    AND CURRENT ROW) FROM t2
+} {0   0   0   0   0   74   41   74   23   99   26   33   2   89   81   96   59   38   68   39   62   91   46   6   99   97   27   46   78   54   97   8   67   29   93   84   77   23   16   16   93   65   35   47   7   86   74   61   91   85   24   85   43   59   12   32   56   3   91   22   90   55   15   28   89   25   47   1   56   40   43   56   16   75   36   89   98   76   81   4   94   42   30   78   33   29   53   63   2   87   37   80   84   72   41   9   61   73   95   65   13   58   96   98   1   21   74   65   35   5   73   11   51   87   41   12   8   20   31   31   15   95   22   73   79   88   34   8   11   49   34   90   59   96   60   55   75   77   44   2   7   85   57   74   29   70   59   19   39   26   26   47   80   90   36   58   47   9   72   72   66   33   93   75   64   81   9   23   37   13   12   14   62   91   36   91   33   15   34   36   99   3   95   69   58   52   30   50   84   10   84   33   21   39   44   58   30   38   34   83}
+
+do_execsql_test 1.8.11.2 {
+  SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING    AND CURRENT ROW) FROM t2
+} {0   0   0   0   0   90   40   30   80   20   90   60   70   80   90   41   41   41   41   41   81   91   61   91   91   1   81   41   61   1   21   11   51   41   31   31   11   2   2   2   2   2   62   12   32   22   42   2   72   12   22   2   72   72   23   23   23   23   23   33   93   23   93   43   3   43   33   53   63   73   13   73   73   33   93   23   13   74   74   74   74   74   74   54   84   74   24   4   94   84   74   34   34   44   74   64   14   34   65   65   65   65   65   35   85   85   55   15   25   75   95   65   65   35   5   15   95   55   75   26   26   26   26   26   96   46   6   46   16   16   86   56   56   56   16   36   76   96   96   26   26   97   97   97   97   97   27   97   67   77   47   7   47   87   37   87   77   7   57   47   47   38   38   38   38   38   68   78   8   28   98   78   58   98   8   88   8   99   99   99   99   99   89   59   39   99   29   59   89   89   29   9   79   49   59   29   59   19   39   9}
+
+do_execsql_test 1.8.11.3 {
+  SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING    AND CURRENT ROW ) FROM t2
+} {0   0   0   0   0   1   1   2   2   2   3   3   4   5   6   7   7   7   8   8   8   9   9   9   10   11   11   12   12   12   13   13   14   15   15   15   16   16   16   17   19   20   21   21   22   22   23   23   23   24   25   26   26   26   27   27   28   29   29   29   30   30   30   31   31   32   33   33   33   33   33   34   34   34   34   35   35   36   36   36   36   37   37   38   38   39   39   39   40   41   41   41   42   43   43   44   44   46   46   47   47   47   47   49   50   51   52   53   54   55   55   56   56   56   57   58   58   58   58   59   59   59   59   60   61   61   62   62   63   64   65   65   65   66   67   68   69   70   72   72   72   73   73   73   74   74   74   74   74   75   75   75   76   77   77   78   78   79   80   80   81   81   81   82   83   84   84   84   84   85   85   85   86   87   87   88   89   89   89   90   90   90   91   91   91   91   91   93   93   93   94   95   95   95   96   96   96   97   97   98}
+
+do_execsql_test 1.8.11.4 {
+  SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING    AND CURRENT ROW ) FROM t2
+} {0   0   0   0   0   10   20   30   30   30   40   50   60   70   80   1   1   1   1   1   1   11   11   21   21   31   31   41   41   41   51   61   61   81   81   81   91   2   2   2   2   2   2   2   12   12   12   22   22   32   42   52   62   62   3   3   3   3   3   3   13   13   23   23   23   33   33   33   33   33   43   43   53   63   73   73   73   4   4   4   4   4   14   24   34   34   34   34   44   44   54   64   74   74   74   74   74   84   5   5   5   5   5   15   15   15   25   35   35   55   55   65   65   65   75   75   75   85   85   6   6   6   6   6   16   16   16   26   26   26   36   36   36   36   46   46   56   56   56   66   76   7   7   7   7   7   7   7   17   27   27   37   37   47   47   47   47   57   67   77   77   8   8   8   8   8   8   8   28   38   38   58   58   58   58   68   78   9   9   9   9   9   9   9   19   29   29   29   39   39   39   49   59   59   59   59   69   79   89   89}
+
+do_execsql_test 1.8.11.5 {
+  SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING    AND CURRENT ROW ) FROM t2
+} {0   0   0   0   0   90   40   30   80   20   90   60   70   80   90   30   50   10   30   41   81   91   61   91   91   1   81   41   61   1   21   11   51   41   31   31   11   81   91   91   21   2   62   12   32   22   42   2   72   12   22   2   72   72   12   62   52   82   23   33   93   23   93   43   3   43   33   53   63   73   13   73   73   33   93   23   13   33   3   33   83   74   74   54   84   74   24   4   94   84   74   34   34   44   74   64   14   34   84   84   44   34   65   35   85   85   55   15   25   75   95   65   65   35   5   15   95   55   75   85   75   15   95   26   96   46   6   46   16   16   86   56   56   56   16   36   76   96   96   26   26   36   66   36   36   97   27   97   67   77   47   7   47   87   37   87   77   7   57   47   47   37   27   17   7   38   68   78   8   28   98   78   58   98   8   88   8   58   58   58   38   99   89   59   39   99   29   59   89   89   29   9   79   49   59   29   59   19   39   9}
+
+do_execsql_test 1.8.11.6 {
+  SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING    AND CURRENT ROW) FROM t2
+} {0   74   74   26   2   96   38   68   62   46   6   46   78   54   8   84   16   16   86   74   24   12   32   56   22   90   28   56   40   56   16   36   98   76   4   94   42   30   78   2   80   84   72   58   96   98   74   12   8   20   22   88   34   8   34   90   96   60   44   2   74   70   26   26   80   90   36   58   72   72   66   64   12   14   62   36   34   36   58   52   30   50   84   10   84   44   58   30   38   34   82   41   23   99   33   89   81   59   39   91   99   97   27   97   67   29   93   77   23   93   65   35   47   7   61   91   85   85   43   59   3   91   55   15   89   25   47   1   43   75   89   81   33   29   53   63   87   37   41   9   61   73   95   65   13   1   21   65   35   5   73   11   51   87   41   31   31   15   95   73   79   11   49   59   55   75   77   7   85   57   29   59   19   39   47   47   9   33   93   75   81   9   23   37   13   91   91   33   15   99   3   95   69   33   21   39   83   27   17   7}
+
 do_execsql_test 1.9.2.1 {
   SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW         AND CURRENT ROW ) FROM t2
 } {0   74   41   74   23   99   26   33   2   89   81   96   59   38   68   39   62   91   46   6   99   97   27   46   78   54   97   8   67   29   93   84   77   23   16   16   93   65   35   47   7   86   74   61   91   85   24   85   43   59   12   32   56   3   91   22   90   55   15   28   89   25   47   1   56   40   43   56   16   75   36   89   98   76   81   4   94   42   30   78   33   29   53   63   2   87   37   80   84   72   41   9   61   73   95   65   13   58   96   98   1   21   74   65   35   5   73   11   51   87   41   12   8   20   31   31   15   95   22   73   79   88   34   8   11   49   34   90   59   96   60   55   75   77   44   2   7   85   57   74   29   70   59   19   39   26   26   47   80   90   36   58   47   9   72   72   66   33   93   75   64   81   9   23   37   13   12   14   62   91   36   91   33   15   34   36   99   3   95   69   58   52   30   50   84   10   84   33   21   39   44   58   30   38   34   83   27   82   17   7}
@@ -2433,6 +2625,30 @@ do_execsql_test 1.9.10.6 {
   SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW         AND CURRENT ROW) FROM t2
 } {0   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}}
 
+do_execsql_test 1.9.11.1 {
+  SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW         AND CURRENT ROW) FROM t2
+} {0   74   41   74   23   99   26   33   2   89   81   96   59   38   68   39   62   91   46   6   99   97   27   46   78   54   97   8   67   29   93   84   77   23   16   16   93   65   35   47   7   86   74   61   91   85   24   85   43   59   12   32   56   3   91   22   90   55   15   28   89   25   47   1   56   40   43   56   16   75   36   89   98   76   81   4   94   42   30   78   33   29   53   63   2   87   37   80   84   72   41   9   61   73   95   65   13   58   96   98   1   21   74   65   35   5   73   11   51   87   41   12   8   20   31   31   15   95   22   73   79   88   34   8   11   49   34   90   59   96   60   55   75   77   44   2   7   85   57   74   29   70   59   19   39   26   26   47   80   90   36   58   47   9   72   72   66   33   93   75   64   81   9   23   37   13   12   14   62   91   36   91   33   15   34   36   99   3   95   69   58   52   30   50   84   10   84   33   21   39   44   58   30   38   34   83   27   82   17   7}
+
+do_execsql_test 1.9.11.2 {
+  SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW         AND CURRENT ROW) FROM t2
+} {0   90   40   30   80   20   90   60   70   80   90   30   50   10   30   41   81   91   61   91   91   1   81   41   61   1   21   11   51   41   31   31   11   81   91   91   21   2   62   12   32   22   42   2   72   12   22   2   72   72   12   62   52   82   23   33   93   23   93   43   3   43   33   53   63   73   13   73   73   33   93   23   13   33   3   33   83   74   74   54   84   74   24   4   94   84   74   34   34   44   74   64   14   34   84   84   44   34   65   35   85   85   55   15   25   75   95   65   65   35   5   15   95   55   75   85   75   15   95   26   96   46   6   46   16   16   86   56   56   56   16   36   76   96   96   26   26   36   66   36   36   97   27   97   67   77   47   7   47   87   37   87   77   7   57   47   47   37   27   17   7   38   68   78   8   28   98   78   58   98   8   88   8   58   58   58   38   99   89   59   39   99   29   59   89   89   29   9   79   49   59   29   59   19   39   9   9   99   69   39}
+
+do_execsql_test 1.9.11.3 {
+  SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW         AND CURRENT ROW ) FROM t2
+} {0   1   1   2   2   2   3   3   4   5   6   7   7   7   8   8   8   9   9   9   10   11   11   12   12   12   13   13   14   15   15   15   16   16   16   17   19   20   21   21   22   22   23   23   23   24   25   26   26   26   27   27   28   29   29   29   30   30   30   31   31   32   33   33   33   33   33   34   34   34   34   35   35   36   36   36   36   37   37   38   38   39   39   39   40   41   41   41   42   43   43   44   44   46   46   47   47   47   47   49   50   51   52   53   54   55   55   56   56   56   57   58   58   58   58   59   59   59   59   60   61   61   62   62   63   64   65   65   65   66   67   68   69   70   72   72   72   73   73   73   74   74   74   74   74   75   75   75   76   77   77   78   78   79   80   80   81   81   81   82   83   84   84   84   84   85   85   85   86   87   87   88   89   89   89   90   90   90   91   91   91   91   91   93   93   93   94   95   95   95   96   96   96   97   97   98   98   99   99   99}
+
+do_execsql_test 1.9.11.4 {
+  SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW         AND CURRENT ROW ) FROM t2
+} {0   10   20   30   30   30   40   50   60   70   80   80   90   90   90   1   1   11   11   21   21   31   31   41   41   41   51   61   61   81   81   81   91   91   91   91   91   2   2   2   12   12   12   22   22   32   42   52   62   62   72   72   72   82   3   3   13   13   23   23   23   33   33   33   33   33   43   43   53   63   73   73   73   83   93   93   93   4   14   24   34   34   34   34   44   44   54   64   74   74   74   74   74   84   84   84   84   94   5   15   15   15   25   35   35   55   55   65   65   65   75   75   75   85   85   85   95   95   95   6   16   16   16   26   26   26   36   36   36   36   46   46   56   56   56   66   76   86   96   96   96   7   7   7   17   27   27   37   37   47   47   47   47   57   67   77   77   87   87   97   97   8   8   8   28   38   38   58   58   58   58   68   78   78   88   98   98   9   9   9   19   29   29   29   39   39   39   49   59   59   59   59   69   79   89   89   89   99   99   99}
+
+do_execsql_test 1.9.11.5 {
+  SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW         AND CURRENT ROW ) FROM t2
+} {0   90   40   30   80   20   90   60   70   80   90   30   50   10   30   41   81   91   61   91   91   1   81   41   61   1   21   11   51   41   31   31   11   81   91   91   21   2   62   12   32   22   42   2   72   12   22   2   72   72   12   62   52   82   23   33   93   23   93   43   3   43   33   53   63   73   13   73   73   33   93   23   13   33   3   33   83   74   74   54   84   74   24   4   94   84   74   34   34   44   74   64   14   34   84   84   44   34   65   35   85   85   55   15   25   75   95   65   65   35   5   15   95   55   75   85   75   15   95   26   96   46   6   46   16   16   86   56   56   56   16   36   76   96   96   26   26   36   66   36   36   97   27   97   67   77   47   7   47   87   37   87   77   7   57   47   47   37   27   17   7   38   68   78   8   28   98   78   58   98   8   88   8   58   58   58   38   99   89   59   39   99   29   59   89   89   29   9   79   49   59   29   59   19   39   9   9   99   69   39}
+
+do_execsql_test 1.9.11.6 {
+  SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW         AND CURRENT ROW) FROM t2
+} {0   74   74   26   2   96   38   68   62   46   6   46   78   54   8   84   16   16   86   74   24   12   32   56   22   90   28   56   40   56   16   36   98   76   4   94   42   30   78   2   80   84   72   58   96   98   74   12   8   20   22   88   34   8   34   90   96   60   44   2   74   70   26   26   80   90   36   58   72   72   66   64   12   14   62   36   34   36   58   52   30   50   84   10   84   44   58   30   38   34   82   41   23   99   33   89   81   59   39   91   99   97   27   97   67   29   93   77   23   93   65   35   47   7   61   91   85   85   43   59   3   91   55   15   89   25   47   1   43   75   89   81   33   29   53   63   87   37   41   9   61   73   95   65   13   1   21   65   35   5   73   11   51   87   41   31   31   15   95   73   79   11   49   59   55   75   77   7   85   57   29   59   19   39   47   47   9   33   93   75   81   9   23   37   13   91   91   33   15   99   3   95   69   33   21   39   83   27   17   7}
+
 do_execsql_test 1.10.2.1 {
   SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2
 } {74   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99}
@@ -2697,6 +2913,30 @@ do_execsql_test 1.10.10.6 {
   SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2
 } {0   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}}
 
+do_execsql_test 1.10.11.1 {
+  SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0}
+
+do_execsql_test 1.10.11.2 {
+  SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   38   38   38   38   38   38   38   38   38   38   38   38   38   38   38   38   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99}
+
+do_execsql_test 1.10.11.3 {
+  SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0}
+
+do_execsql_test 1.10.11.4 {
+  SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9}
+
+do_execsql_test 1.10.11.5 {
+  SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0}
+
+do_execsql_test 1.10.11.6 {
+  SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2
+} {0   74   74   26   2   96   38   68   62   46   6   46   78   54   8   84   16   16   86   74   24   12   32   56   22   90   28   56   40   56   16   36   98   76   4   94   42   30   78   2   80   84   72   58   96   98   74   12   8   20   22   88   34   8   34   90   96   60   44   2   74   70   26   26   80   90   36   58   72   72   66   64   12   14   62   36   34   36   58   52   30   50   84   10   84   44   58   30   38   34   82   41   23   99   33   89   81   59   39   91   99   97   27   97   67   29   93   77   23   93   65   35   47   7   61   91   85   85   43   59   3   91   55   15   89   25   47   1   43   75   89   81   33   29   53   63   87   37   41   9   61   73   95   65   13   1   21   65   35   5   73   11   51   87   41   31   31   15   95   73   79   11   49   59   55   75   77   7   85   57   29   59   19   39   47   47   9   33   93   75   81   9   23   37   13   91   91   33   15   99   3   95   69   33   21   39   83   27   17   7}
+
 do_execsql_test 1.11.2.1 {
   SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING    AND 2 FOLLOWING ) FROM t2
 } {74   74   74   99   99   99   99   99   99   99   96   96   96   96   96   96   91   91   99   99   99   99   99   99   99   97   97   97   97   97   97   93   93   93   93   93   93   93   93   93   93   86   91   91   91   91   91   91   91   85   85   85   91   91   91   91   91   91   91   90   90   89   89   89   89   56   56   75   75   89   98   98   98   98   98   98   98   94   94   94   94   78   78   87   87   87   87   87   87   87   84   84   95   95   95   95   96   98   98   98   98   98   98   98   74   74   74   87   87   87   87   87   87   87   41   95   95   95   95   95   95   95   88   88   88   90   90   96   96   96   96   96   96   96   77   85   85   85   85   85   85   85   74   74   70   70   80   90   90   90   90   90   90   90   72   72   93   93   93   93   93   93   93   81   81   81   62   91   91   91   91   91   91   91   99   99   99   99   99   99   99   95   95   84   84   84   84   84   84   84   84   58   58   83   83   83   83   83   83   83}
@@ -2961,6 +3201,30 @@ do_execsql_test 1.11.10.6 {
   SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING    AND 2 FOLLOWING) FROM t2
 } {0   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}}
 
+do_execsql_test 1.11.11.1 {
+  SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING    AND 2 FOLLOWING) FROM t2
+} {0   0   0   0   0   74   41   74   23   99   26   33   2   89   81   96   59   38   68   39   62   91   46   6   99   97   27   46   78   54   97   8   67   29   93   84   77   23   16   16   93   65   35   47   7   86   74   61   91   85   24   85   43   59   12   32   56   3   91   22   90   55   15   28   89   25   47   1   56   40   43   56   16   75   36   89   98   76   81   4   94   42   30   78   33   29   53   63   2   87   37   80   84   72   41   9   61   73   95   65   13   58   96   98   1   21   74   65   35   5   73   11   51   87   41   12   8   20   31   31   15   95   22   73   79   88   34   8   11   49   34   90   59   96   60   55   75   77   44   2   7   85   57   74   29   70   59   19   39   26   26   47   80   90   36   58   47   9   72   72   66   33   93   75   64   81   9   23   37   13   12   14   62   91   36   91   33   15   34   36   99   3   95   69   58   52   30   50   84   10   84   33   21   39   44   58   30   38   34   83}
+
+do_execsql_test 1.11.11.2 {
+  SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING    AND 2 FOLLOWING) FROM t2
+} {0   0   0   0   0   90   40   30   80   20   90   60   70   80   90   41   41   41   41   41   81   91   61   91   91   1   81   41   61   1   21   11   51   41   31   31   11   2   2   2   2   2   62   12   32   22   42   2   72   12   22   2   72   72   23   23   23   23   23   33   93   23   93   43   3   43   33   53   63   73   13   73   73   33   93   23   13   74   74   74   74   74   74   54   84   74   24   4   94   84   74   34   34   44   74   64   14   34   65   65   65   65   65   35   85   85   55   15   25   75   95   65   65   35   5   15   95   55   75   26   26   26   26   26   96   46   6   46   16   16   86   56   56   56   16   36   76   96   96   26   26   97   97   97   97   97   27   97   67   77   47   7   47   87   37   87   77   7   57   47   47   38   38   38   38   38   68   78   8   28   98   78   58   98   8   88   8   99   99   99   99   99   89   59   39   99   29   59   89   89   29   9   79   49   59   29   59   19   39   9}
+
+do_execsql_test 1.11.11.3 {
+  SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING    AND 2 FOLLOWING ) FROM t2
+} {0   0   0   0   0   1   1   2   2   2   3   3   4   5   6   7   7   7   8   8   8   9   9   9   10   11   11   12   12   12   13   13   14   15   15   15   16   16   16   17   19   20   21   21   22   22   23   23   23   24   25   26   26   26   27   27   28   29   29   29   30   30   30   31   31   32   33   33   33   33   33   34   34   34   34   35   35   36   36   36   36   37   37   38   38   39   39   39   40   41   41   41   42   43   43   44   44   46   46   47   47   47   47   49   50   51   52   53   54   55   55   56   56   56   57   58   58   58   58   59   59   59   59   60   61   61   62   62   63   64   65   65   65   66   67   68   69   70   72   72   72   73   73   73   74   74   74   74   74   75   75   75   76   77   77   78   78   79   80   80   81   81   81   82   83   84   84   84   84   85   85   85   86   87   87   88   89   89   89   90   90   90   91   91   91   91   91   93   93   93   94   95   95   95   96   96   96   97   97   98}
+
+do_execsql_test 1.11.11.4 {
+  SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING    AND 2 FOLLOWING ) FROM t2
+} {0   0   0   0   0   10   20   30   30   30   40   50   60   70   80   1   1   1   1   1   1   11   11   21   21   31   31   41   41   41   51   61   61   81   81   81   91   2   2   2   2   2   2   2   12   12   12   22   22   32   42   52   62   62   3   3   3   3   3   3   13   13   23   23   23   33   33   33   33   33   43   43   53   63   73   73   73   4   4   4   4   4   14   24   34   34   34   34   44   44   54   64   74   74   74   74   74   84   5   5   5   5   5   15   15   15   25   35   35   55   55   65   65   65   75   75   75   85   85   6   6   6   6   6   16   16   16   26   26   26   36   36   36   36   46   46   56   56   56   66   76   7   7   7   7   7   7   7   17   27   27   37   37   47   47   47   47   57   67   77   77   8   8   8   8   8   8   8   28   38   38   58   58   58   58   68   78   9   9   9   9   9   9   9   19   29   29   29   39   39   39   49   59   59   59   59   69   79   89   89}
+
+do_execsql_test 1.11.11.5 {
+  SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING    AND 2 FOLLOWING ) FROM t2
+} {0   0   0   0   0   90   40   30   80   20   90   60   70   80   90   30   50   10   30   41   81   91   61   91   91   1   81   41   61   1   21   11   51   41   31   31   11   81   91   91   21   2   62   12   32   22   42   2   72   12   22   2   72   72   12   62   52   82   23   33   93   23   93   43   3   43   33   53   63   73   13   73   73   33   93   23   13   33   3   33   83   74   74   54   84   74   24   4   94   84   74   34   34   44   74   64   14   34   84   84   44   34   65   35   85   85   55   15   25   75   95   65   65   35   5   15   95   55   75   85   75   15   95   26   96   46   6   46   16   16   86   56   56   56   16   36   76   96   96   26   26   36   66   36   36   97   27   97   67   77   47   7   47   87   37   87   77   7   57   47   47   37   27   17   7   38   68   78   8   28   98   78   58   98   8   88   8   58   58   58   38   99   89   59   39   99   29   59   89   89   29   9   79   49   59   29   59   19   39   9}
+
+do_execsql_test 1.11.11.6 {
+  SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING    AND 2 FOLLOWING) FROM t2
+} {0   74   74   26   2   96   38   68   62   46   6   46   78   54   8   84   16   16   86   74   24   12   32   56   22   90   28   56   40   56   16   36   98   76   4   94   42   30   78   2   80   84   72   58   96   98   74   12   8   20   22   88   34   8   34   90   96   60   44   2   74   70   26   26   80   90   36   58   72   72   66   64   12   14   62   36   34   36   58   52   30   50   84   10   84   44   58   30   38   34   82   41   23   99   33   89   81   59   39   91   99   97   27   97   67   29   93   77   23   93   65   35   47   7   61   91   85   85   43   59   3   91   55   15   89   25   47   1   43   75   89   81   33   29   53   63   87   37   41   9   61   73   95   65   13   1   21   65   35   5   73   11   51   87   41   31   31   15   95   73   79   11   49   59   55   75   77   7   85   57   29   59   19   39   47   47   9   33   93   75   81   9   23   37   13   91   91   33   15   99   3   95   69   33   21   39   83   27   17   7}
+
 do_execsql_test 1.12.2.1 {
   SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW         AND 4 FOLLOWING ) FROM t2
 } {74   99   99   99   99   99   89   96   96   96   96   96   68   91   91   91   99   99   99   99   99   97   97   97   97   97   97   93   93   93   93   84   93   93   93   93   93   86   86   86   91   91   91   91   91   85   85   85   59   59   91   91   91   91   91   90   90   89   89   89   89   56   56   56   56   75   75   89   98   98   98   98   98   94   94   94   94   78   78   78   63   87   87   87   87   87   84   84   84   73   95   95   95   95   96   98   98   98   98   98   74   74   74   73   73   87   87   87   87   87   41   31   31   95   95   95   95   95   88   88   88   88   49   90   90   96   96   96   96   96   77   77   77   85   85   85   85   85   74   74   70   70   59   47   80   90   90   90   90   90   72   72   72   72   93   93   93   93   93   81   81   81   37   37   62   91   91   91   91   91   91   91   99   99   99   99   99   95   95   69   84   84   84   84   84   84   84   58   58   58   58   83   83   83   83   83   82   82   17   7}
@@ -3225,6 +3489,30 @@ do_execsql_test 1.12.10.6 {
   SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW         AND 4 FOLLOWING) FROM t2
 } {0   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}}
 
+do_execsql_test 1.12.11.1 {
+  SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW         AND 4 FOLLOWING) FROM t2
+} {0   74   41   74   23   99   26   33   2   89   81   96   59   38   68   39   62   91   46   6   99   97   27   46   78   54   97   8   67   29   93   84   77   23   16   16   93   65   35   47   7   86   74   61   91   85   24   85   43   59   12   32   56   3   91   22   90   55   15   28   89   25   47   1   56   40   43   56   16   75   36   89   98   76   81   4   94   42   30   78   33   29   53   63   2   87   37   80   84   72   41   9   61   73   95   65   13   58   96   98   1   21   74   65   35   5   73   11   51   87   41   12   8   20   31   31   15   95   22   73   79   88   34   8   11   49   34   90   59   96   60   55   75   77   44   2   7   85   57   74   29   70   59   19   39   26   26   47   80   90   36   58   47   9   72   72   66   33   93   75   64   81   9   23   37   13   12   14   62   91   36   91   33   15   34   36   99   3   95   69   58   52   30   50   84   10   84   33   21   39   44   58   30   38   34   83   27   82   17   7}
+
+do_execsql_test 1.12.11.2 {
+  SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW         AND 4 FOLLOWING) FROM t2
+} {0   90   40   30   80   20   90   60   70   80   90   30   50   10   30   41   81   91   61   91   91   1   81   41   61   1   21   11   51   41   31   31   11   81   91   91   21   2   62   12   32   22   42   2   72   12   22   2   72   72   12   62   52   82   23   33   93   23   93   43   3   43   33   53   63   73   13   73   73   33   93   23   13   33   3   33   83   74   74   54   84   74   24   4   94   84   74   34   34   44   74   64   14   34   84   84   44   34   65   35   85   85   55   15   25   75   95   65   65   35   5   15   95   55   75   85   75   15   95   26   96   46   6   46   16   16   86   56   56   56   16   36   76   96   96   26   26   36   66   36   36   97   27   97   67   77   47   7   47   87   37   87   77   7   57   47   47   37   27   17   7   38   68   78   8   28   98   78   58   98   8   88   8   58   58   58   38   99   89   59   39   99   29   59   89   89   29   9   79   49   59   29   59   19   39   9   9   99   69   39}
+
+do_execsql_test 1.12.11.3 {
+  SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW         AND 4 FOLLOWING ) FROM t2
+} {0   1   1   2   2   2   3   3   4   5   6   7   7   7   8   8   8   9   9   9   10   11   11   12   12   12   13   13   14   15   15   15   16   16   16   17   19   20   21   21   22   22   23   23   23   24   25   26   26   26   27   27   28   29   29   29   30   30   30   31   31   32   33   33   33   33   33   34   34   34   34   35   35   36   36   36   36   37   37   38   38   39   39   39   40   41   41   41   42   43   43   44   44   46   46   47   47   47   47   49   50   51   52   53   54   55   55   56   56   56   57   58   58   58   58   59   59   59   59   60   61   61   62   62   63   64   65   65   65   66   67   68   69   70   72   72   72   73   73   73   74   74   74   74   74   75   75   75   76   77   77   78   78   79   80   80   81   81   81   82   83   84   84   84   84   85   85   85   86   87   87   88   89   89   89   90   90   90   91   91   91   91   91   93   93   93   94   95   95   95   96   96   96   97   97   98   98   99   99   99}
+
+do_execsql_test 1.12.11.4 {
+  SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW         AND 4 FOLLOWING ) FROM t2
+} {0   10   20   30   30   30   40   50   60   70   80   80   90   90   90   1   1   11   11   21   21   31   31   41   41   41   51   61   61   81   81   81   91   91   91   91   91   2   2   2   12   12   12   22   22   32   42   52   62   62   72   72   72   82   3   3   13   13   23   23   23   33   33   33   33   33   43   43   53   63   73   73   73   83   93   93   93   4   14   24   34   34   34   34   44   44   54   64   74   74   74   74   74   84   84   84   84   94   5   15   15   15   25   35   35   55   55   65   65   65   75   75   75   85   85   85   95   95   95   6   16   16   16   26   26   26   36   36   36   36   46   46   56   56   56   66   76   86   96   96   96   7   7   7   17   27   27   37   37   47   47   47   47   57   67   77   77   87   87   97   97   8   8   8   28   38   38   58   58   58   58   68   78   78   88   98   98   9   9   9   19   29   29   29   39   39   39   49   59   59   59   59   69   79   89   89   89   99   99   99}
+
+do_execsql_test 1.12.11.5 {
+  SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW         AND 4 FOLLOWING ) FROM t2
+} {0   90   40   30   80   20   90   60   70   80   90   30   50   10   30   41   81   91   61   91   91   1   81   41   61   1   21   11   51   41   31   31   11   81   91   91   21   2   62   12   32   22   42   2   72   12   22   2   72   72   12   62   52   82   23   33   93   23   93   43   3   43   33   53   63   73   13   73   73   33   93   23   13   33   3   33   83   74   74   54   84   74   24   4   94   84   74   34   34   44   74   64   14   34   84   84   44   34   65   35   85   85   55   15   25   75   95   65   65   35   5   15   95   55   75   85   75   15   95   26   96   46   6   46   16   16   86   56   56   56   16   36   76   96   96   26   26   36   66   36   36   97   27   97   67   77   47   7   47   87   37   87   77   7   57   47   47   37   27   17   7   38   68   78   8   28   98   78   58   98   8   88   8   58   58   58   38   99   89   59   39   99   29   59   89   89   29   9   79   49   59   29   59   19   39   9   9   99   69   39}
+
+do_execsql_test 1.12.11.6 {
+  SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW         AND 4 FOLLOWING) FROM t2
+} {0   74   74   26   2   96   38   68   62   46   6   46   78   54   8   84   16   16   86   74   24   12   32   56   22   90   28   56   40   56   16   36   98   76   4   94   42   30   78   2   80   84   72   58   96   98   74   12   8   20   22   88   34   8   34   90   96   60   44   2   74   70   26   26   80   90   36   58   72   72   66   64   12   14   62   36   34   36   58   52   30   50   84   10   84   44   58   30   38   34   82   41   23   99   33   89   81   59   39   91   99   97   27   97   67   29   93   77   23   93   65   35   47   7   61   91   85   85   43   59   3   91   55   15   89   25   47   1   43   75   89   81   33   29   53   63   87   37   41   9   61   73   95   65   13   1   21   65   35   5   73   11   51   87   41   31   31   15   95   73   79   11   49   59   55   75   77   7   85   57   29   59   19   39   47   47   9   33   93   75   81   9   23   37   13   91   91   33   15   99   3   95   69   33   21   39   83   27   17   7}
+
 do_execsql_test 1.13.2.1 {
   SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN 2 FOLLOWING    AND 4 FOLLOWING ) FROM t2
 } {74   99   99   99   33   89   89   96   96   96   68   68   68   91   91   91   99   99   99   97   78   78   97   97   97   67   93   93   93   84   77   23   93   93   93   65   47   86   86   86   91   91   91   85   85   85   59   59   56   56   91   91   91   90   90   55   89   89   89   47   56   56   56   56   56   75   75   89   98   98   98   81   94   94   94   78   78   78   53   63   63   87   87   87   84   84   84   72   61   73   95   95   95   65   96   98   98   98   74   74   74   65   73   73   73   87   87   87   41   20   31   31   31   95   95   95   79   88   88   88   34   49   49   90   90   96   96   96   75   77   77   77   44   85   85   85   74   74   70   70   59   39   39   47   80   90   90   90   58   58   72   72   72   72   93   93   93   81   81   81   37   37   37   14   62   91   91   91   91   91   34   36   99   99   99   95   95   69   58   52   84   84   84   84   84   39   44   58   58   58   38   83   83   83   82   82   17   7   {}   {}}
@@ -3489,6 +3777,30 @@ do_execsql_test 1.13.10.6 {
   SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING    AND 4 FOLLOWING) FROM t2
 } {{}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}}
 
+do_execsql_test 1.13.11.1 {
+  SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN 2 FOLLOWING    AND 4 FOLLOWING) FROM t2
+} {41   74   23   99   26   33   2   89   81   96   59   38   68   39   62   91   46   6   99   97   27   46   78   54   97   8   67   29   93   84   77   23   16   16   93   65   35   47   7   86   74   61   91   85   24   85   43   59   12   32   56   3   91   22   90   55   15   28   89   25   47   1   56   40   43   56   16   75   36   89   98   76   81   4   94   42   30   78   33   29   53   63   2   87   37   80   84   72   41   9   61   73   95   65   13   58   96   98   1   21   74   65   35   5   73   11   51   87   41   12   8   20   31   31   15   95   22   73   79   88   34   8   11   49   34   90   59   96   60   55   75   77   44   2   7   85   57   74   29   70   59   19   39   26   26   47   80   90   36   58   47   9   72   72   66   33   93   75   64   81   9   23   37   13   12   14   62   91   36   91   33   15   34   36   99   3   95   69   58   52   30   50   84   10   84   33   21   39   44   58   30   38   34   83   27   82   17   7   {}   {}}
+
+do_execsql_test 1.13.11.2 {
+  SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 2 FOLLOWING    AND 4 FOLLOWING) FROM t2
+} {40   30   80   20   90   60   70   80   90   30   50   10   30   {}   {}   91   61   91   91   1   81   41   61   1   21   11   51   41   31   31   11   81   91   91   21   {}   {}   12   32   22   42   2   72   12   22   2   72   72   12   62   52   82   {}   {}   93   23   93   43   3   43   33   53   63   73   13   73   73   33   93   23   13   33   3   33   83   {}   {}   54   84   74   24   4   94   84   74   34   34   44   74   64   14   34   84   84   44   34   {}   {}   85   85   55   15   25   75   95   65   65   35   5   15   95   55   75   85   75   15   95   {}   {}   46   6   46   16   16   86   56   56   56   16   36   76   96   96   26   26   36   66   36   36   {}   {}   97   67   77   47   7   47   87   37   87   77   7   57   47   47   37   27   17   7   {}   {}   78   8   28   98   78   58   98   8   88   8   58   58   58   38   {}   {}   59   39   99   29   59   89   89   29   9   79   49   59   29   59   19   39   9   9   99   69   39   {}   {}}
+
+do_execsql_test 1.13.11.3 {
+  SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN 2 FOLLOWING    AND 4 FOLLOWING ) FROM t2
+} {1   2   2   2   3   3   4   5   6   7   7   7   8   8   8   9   9   9   10   11   11   12   12   12   13   13   14   15   15   15   16   16   16   17   19   20   21   21   22   22   23   23   23   24   25   26   26   26   27   27   28   29   29   29   30   30   30   31   31   32   33   33   33   33   33   34   34   34   34   35   35   36   36   36   36   37   37   38   38   39   39   39   40   41   41   41   42   43   43   44   44   46   46   47   47   47   47   49   50   51   52   53   54   55   55   56   56   56   57   58   58   58   58   59   59   59   59   60   61   61   62   62   63   64   65   65   65   66   67   68   69   70   72   72   72   73   73   73   74   74   74   74   74   75   75   75   76   77   77   78   78   79   80   80   81   81   81   82   83   84   84   84   84   85   85   85   86   87   87   88   89   89   89   90   90   90   91   91   91   91   91   93   93   93   94   95   95   95   96   96   96   97   97   98   98   99   99   99   {}   {}}
+
+do_execsql_test 1.13.11.4 {
+  SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 2 FOLLOWING    AND 4 FOLLOWING ) FROM t2
+} {20   30   30   30   40   50   60   70   80   80   90   90   90   {}   {}   11   11   21   21   31   31   41   41   41   51   61   61   81   81   81   91   91   91   91   91   {}   {}   2   12   12   12   22   22   32   42   52   62   62   72   72   72   82   {}   {}   13   13   23   23   23   33   33   33   33   33   43   43   53   63   73   73   73   83   93   93   93   {}   {}   24   34   34   34   34   44   44   54   64   74   74   74   74   74   84   84   84   84   94   {}   {}   15   15   25   35   35   55   55   65   65   65   75   75   75   85   85   85   95   95   95   {}   {}   16   16   26   26   26   36   36   36   36   46   46   56   56   56   66   76   86   96   96   96   {}   {}   7   17   27   27   37   37   47   47   47   47   57   67   77   77   87   87   97   97   {}   {}   8   28   38   38   58   58   58   58   68   78   78   88   98   98   {}   {}   9   19   29   29   29   39   39   39   49   59   59   59   59   69   79   89   89   89   99   99   99   {}   {}}
+
+do_execsql_test 1.13.11.5 {
+  SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN 2 FOLLOWING    AND 4 FOLLOWING ) FROM t2
+} {40   30   80   20   90   60   70   80   90   30   50   10   30   41   81   91   61   91   91   1   81   41   61   1   21   11   51   41   31   31   11   81   91   91   21   2   62   12   32   22   42   2   72   12   22   2   72   72   12   62   52   82   23   33   93   23   93   43   3   43   33   53   63   73   13   73   73   33   93   23   13   33   3   33   83   74   74   54   84   74   24   4   94   84   74   34   34   44   74   64   14   34   84   84   44   34   65   35   85   85   55   15   25   75   95   65   65   35   5   15   95   55   75   85   75   15   95   26   96   46   6   46   16   16   86   56   56   56   16   36   76   96   96   26   26   36   66   36   36   97   27   97   67   77   47   7   47   87   37   87   77   7   57   47   47   37   27   17   7   38   68   78   8   28   98   78   58   98   8   88   8   58   58   58   38   99   89   59   39   99   29   59   89   89   29   9   79   49   59   29   59   19   39   9   9   99   69   39   {}   {}}
+
+do_execsql_test 1.13.11.6 {
+  SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING    AND 4 FOLLOWING) FROM t2
+} {{}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}}
+
 do_execsql_test 1.14.2.1 {
   SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2
 } {99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99}
@@ -3753,6 +4065,30 @@ do_execsql_test 1.14.10.6 {
   SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2
 } {0   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}}
 
+do_execsql_test 1.14.11.1 {
+  SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0}
+
+do_execsql_test 1.14.11.2 {
+  SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   41   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   23   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   74   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   65   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   26   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   97   38   38   38   38   38   38   38   38   38   38   38   38   38   38   38   38   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99}
+
+do_execsql_test 1.14.11.3 {
+  SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0}
+
+do_execsql_test 1.14.11.4 {
+  SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   7   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9   9}
+
+do_execsql_test 1.14.11.5 {
+  SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2
+} {0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0}
+
+do_execsql_test 1.14.11.6 {
+  SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2
+} {0   74   74   26   2   96   38   68   62   46   6   46   78   54   8   84   16   16   86   74   24   12   32   56   22   90   28   56   40   56   16   36   98   76   4   94   42   30   78   2   80   84   72   58   96   98   74   12   8   20   22   88   34   8   34   90   96   60   44   2   74   70   26   26   80   90   36   58   72   72   66   64   12   14   62   36   34   36   58   52   30   50   84   10   84   44   58   30   38   34   82   41   23   99   33   89   81   59   39   91   99   97   27   97   67   29   93   77   23   93   65   35   47   7   61   91   85   85   43   59   3   91   55   15   89   25   47   1   43   75   89   81   33   29   53   63   87   37   41   9   61   73   95   65   13   1   21   65   35   5   73   11   51   87   41   31   31   15   95   73   79   11   49   59   55   75   77   7   85   57   29   59   19   39   47   47   9   33   93   75   81   9   23   37   13   91   91   33   15   99   3   95   69   33   21   39   83   27   17   7}
+
 do_execsql_test 1.15.2.1 {
   SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING    AND UNBOUNDED FOLLOWING ) FROM t2
 } {99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   95   95   84   84   84   84   84   84   84   84   83   83   83   83   83   83   83   83   83}
@@ -4017,6 +4353,30 @@ do_execsql_test 1.15.10.6 {
   SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING    AND UNBOUNDED FOLLOWING) FROM t2
 } {0   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}}
 
+do_execsql_test 1.15.11.1 {
+  SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING    AND UNBOUNDED FOLLOWING) FROM t2
+} {0   0   0   0   0   74   41   74   23   99   26   33   2   89   81   96   59   38   68   39   62   91   46   6   99   97   27   46   78   54   97   8   67   29   93   84   77   23   16   16   93   65   35   47   7   86   74   61   91   85   24   85   43   59   12   32   56   3   91   22   90   55   15   28   89   25   47   1   56   40   43   56   16   75   36   89   98   76   81   4   94   42   30   78   33   29   53   63   2   87   37   80   84   72   41   9   61   73   95   65   13   58   96   98   1   21   74   65   35   5   73   11   51   87   41   12   8   20   31   31   15   95   22   73   79   88   34   8   11   49   34   90   59   96   60   55   75   77   44   2   7   85   57   74   29   70   59   19   39   26   26   47   80   90   36   58   47   9   72   72   66   33   93   75   64   81   9   23   37   13   12   14   62   91   36   91   33   15   34   36   99   3   95   69   58   52   30   50   84   10   84   33   21   39   44   58   30   38   34   83}
+
+do_execsql_test 1.15.11.2 {
+  SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING    AND UNBOUNDED FOLLOWING) FROM t2
+} {0   0   0   0   0   90   40   30   80   20   90   60   70   80   90   41   41   41   41   41   81   91   61   91   91   1   81   41   61   1   21   11   51   41   31   31   11   2   2   2   2   2   62   12   32   22   42   2   72   12   22   2   72   72   23   23   23   23   23   33   93   23   93   43   3   43   33   53   63   73   13   73   73   33   93   23   13   74   74   74   74   74   74   54   84   74   24   4   94   84   74   34   34   44   74   64   14   34   65   65   65   65   65   35   85   85   55   15   25   75   95   65   65   35   5   15   95   55   75   26   26   26   26   26   96   46   6   46   16   16   86   56   56   56   16   36   76   96   96   26   26   97   97   97   97   97   27   97   67   77   47   7   47   87   37   87   77   7   57   47   47   38   38   38   38   38   68   78   8   28   98   78   58   98   8   88   8   99   99   99   99   99   89   59   39   99   29   59   89   89   29   9   79   49   59   29   59   19   39   9}
+
+do_execsql_test 1.15.11.3 {
+  SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING    AND UNBOUNDED FOLLOWING ) FROM t2
+} {0   0   0   0   0   1   1   2   2   2   3   3   4   5   6   7   7   7   8   8   8   9   9   9   10   11   11   12   12   12   13   13   14   15   15   15   16   16   16   17   19   20   21   21   22   22   23   23   23   24   25   26   26   26   27   27   28   29   29   29   30   30   30   31   31   32   33   33   33   33   33   34   34   34   34   35   35   36   36   36   36   37   37   38   38   39   39   39   40   41   41   41   42   43   43   44   44   46   46   47   47   47   47   49   50   51   52   53   54   55   55   56   56   56   57   58   58   58   58   59   59   59   59   60   61   61   62   62   63   64   65   65   65   66   67   68   69   70   72   72   72   73   73   73   74   74   74   74   74   75   75   75   76   77   77   78   78   79   80   80   81   81   81   82   83   84   84   84   84   85   85   85   86   87   87   88   89   89   89   90   90   90   91   91   91   91   91   93   93   93   94   95   95   95   96   96   96   97   97   98}
+
+do_execsql_test 1.15.11.4 {
+  SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING    AND UNBOUNDED FOLLOWING ) FROM t2
+} {0   0   0   0   0   10   20   30   30   30   40   50   60   70   80   1   1   1   1   1   1   11   11   21   21   31   31   41   41   41   51   61   61   81   81   81   91   2   2   2   2   2   2   2   12   12   12   22   22   32   42   52   62   62   3   3   3   3   3   3   13   13   23   23   23   33   33   33   33   33   43   43   53   63   73   73   73   4   4   4   4   4   14   24   34   34   34   34   44   44   54   64   74   74   74   74   74   84   5   5   5   5   5   15   15   15   25   35   35   55   55   65   65   65   75   75   75   85   85   6   6   6   6   6   16   16   16   26   26   26   36   36   36   36   46   46   56   56   56   66   76   7   7   7   7   7   7   7   17   27   27   37   37   47   47   47   47   57   67   77   77   8   8   8   8   8   8   8   28   38   38   58   58   58   58   68   78   9   9   9   9   9   9   9   19   29   29   29   39   39   39   49   59   59   59   59   69   79   89   89}
+
+do_execsql_test 1.15.11.5 {
+  SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING    AND UNBOUNDED FOLLOWING ) FROM t2
+} {0   0   0   0   0   90   40   30   80   20   90   60   70   80   90   30   50   10   30   41   81   91   61   91   91   1   81   41   61   1   21   11   51   41   31   31   11   81   91   91   21   2   62   12   32   22   42   2   72   12   22   2   72   72   12   62   52   82   23   33   93   23   93   43   3   43   33   53   63   73   13   73   73   33   93   23   13   33   3   33   83   74   74   54   84   74   24   4   94   84   74   34   34   44   74   64   14   34   84   84   44   34   65   35   85   85   55   15   25   75   95   65   65   35   5   15   95   55   75   85   75   15   95   26   96   46   6   46   16   16   86   56   56   56   16   36   76   96   96   26   26   36   66   36   36   97   27   97   67   77   47   7   47   87   37   87   77   7   57   47   47   37   27   17   7   38   68   78   8   28   98   78   58   98   8   88   8   58   58   58   38   99   89   59   39   99   29   59   89   89   29   9   79   49   59   29   59   19   39   9}
+
+do_execsql_test 1.15.11.6 {
+  SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING    AND UNBOUNDED FOLLOWING) FROM t2
+} {0   74   74   26   2   96   38   68   62   46   6   46   78   54   8   84   16   16   86   74   24   12   32   56   22   90   28   56   40   56   16   36   98   76   4   94   42   30   78   2   80   84   72   58   96   98   74   12   8   20   22   88   34   8   34   90   96   60   44   2   74   70   26   26   80   90   36   58   72   72   66   64   12   14   62   36   34   36   58   52   30   50   84   10   84   44   58   30   38   34   82   41   23   99   33   89   81   59   39   91   99   97   27   97   67   29   93   77   23   93   65   35   47   7   61   91   85   85   43   59   3   91   55   15   89   25   47   1   43   75   89   81   33   29   53   63   87   37   41   9   61   73   95   65   13   1   21   65   35   5   73   11   51   87   41   31   31   15   95   73   79   11   49   59   55   75   77   7   85   57   29   59   19   39   47   47   9   33   93   75   81   9   23   37   13   91   91   33   15   99   3   95   69   33   21   39   83   27   17   7}
+
 do_execsql_test 1.16.2.1 {
   SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW         AND UNBOUNDED FOLLOWING ) FROM t2
 } {99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   95   95   84   84   84   84   84   84   84   84   83   83   83   83   83   83   83   83   83   82   82   17   7}
@@ -4281,6 +4641,30 @@ do_execsql_test 1.16.10.6 {
   SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW         AND UNBOUNDED FOLLOWING) FROM t2
 } {0   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}}
 
+do_execsql_test 1.16.11.1 {
+  SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW         AND UNBOUNDED FOLLOWING) FROM t2
+} {0   74   41   74   23   99   26   33   2   89   81   96   59   38   68   39   62   91   46   6   99   97   27   46   78   54   97   8   67   29   93   84   77   23   16   16   93   65   35   47   7   86   74   61   91   85   24   85   43   59   12   32   56   3   91   22   90   55   15   28   89   25   47   1   56   40   43   56   16   75   36   89   98   76   81   4   94   42   30   78   33   29   53   63   2   87   37   80   84   72   41   9   61   73   95   65   13   58   96   98   1   21   74   65   35   5   73   11   51   87   41   12   8   20   31   31   15   95   22   73   79   88   34   8   11   49   34   90   59   96   60   55   75   77   44   2   7   85   57   74   29   70   59   19   39   26   26   47   80   90   36   58   47   9   72   72   66   33   93   75   64   81   9   23   37   13   12   14   62   91   36   91   33   15   34   36   99   3   95   69   58   52   30   50   84   10   84   33   21   39   44   58   30   38   34   83   27   82   17   7}
+
+do_execsql_test 1.16.11.2 {
+  SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW         AND UNBOUNDED FOLLOWING) FROM t2
+} {0   90   40   30   80   20   90   60   70   80   90   30   50   10   30   41   81   91   61   91   91   1   81   41   61   1   21   11   51   41   31   31   11   81   91   91   21   2   62   12   32   22   42   2   72   12   22   2   72   72   12   62   52   82   23   33   93   23   93   43   3   43   33   53   63   73   13   73   73   33   93   23   13   33   3   33   83   74   74   54   84   74   24   4   94   84   74   34   34   44   74   64   14   34   84   84   44   34   65   35   85   85   55   15   25   75   95   65   65   35   5   15   95   55   75   85   75   15   95   26   96   46   6   46   16   16   86   56   56   56   16   36   76   96   96   26   26   36   66   36   36   97   27   97   67   77   47   7   47   87   37   87   77   7   57   47   47   37   27   17   7   38   68   78   8   28   98   78   58   98   8   88   8   58   58   58   38   99   89   59   39   99   29   59   89   89   29   9   79   49   59   29   59   19   39   9   9   99   69   39}
+
+do_execsql_test 1.16.11.3 {
+  SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW         AND UNBOUNDED FOLLOWING ) FROM t2
+} {0   1   1   2   2   2   3   3   4   5   6   7   7   7   8   8   8   9   9   9   10   11   11   12   12   12   13   13   14   15   15   15   16   16   16   17   19   20   21   21   22   22   23   23   23   24   25   26   26   26   27   27   28   29   29   29   30   30   30   31   31   32   33   33   33   33   33   34   34   34   34   35   35   36   36   36   36   37   37   38   38   39   39   39   40   41   41   41   42   43   43   44   44   46   46   47   47   47   47   49   50   51   52   53   54   55   55   56   56   56   57   58   58   58   58   59   59   59   59   60   61   61   62   62   63   64   65   65   65   66   67   68   69   70   72   72   72   73   73   73   74   74   74   74   74   75   75   75   76   77   77   78   78   79   80   80   81   81   81   82   83   84   84   84   84   85   85   85   86   87   87   88   89   89   89   90   90   90   91   91   91   91   91   93   93   93   94   95   95   95   96   96   96   97   97   98   98   99   99   99}
+
+do_execsql_test 1.16.11.4 {
+  SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW         AND UNBOUNDED FOLLOWING ) FROM t2
+} {0   10   20   30   30   30   40   50   60   70   80   80   90   90   90   1   1   11   11   21   21   31   31   41   41   41   51   61   61   81   81   81   91   91   91   91   91   2   2   2   12   12   12   22   22   32   42   52   62   62   72   72   72   82   3   3   13   13   23   23   23   33   33   33   33   33   43   43   53   63   73   73   73   83   93   93   93   4   14   24   34   34   34   34   44   44   54   64   74   74   74   74   74   84   84   84   84   94   5   15   15   15   25   35   35   55   55   65   65   65   75   75   75   85   85   85   95   95   95   6   16   16   16   26   26   26   36   36   36   36   46   46   56   56   56   66   76   86   96   96   96   7   7   7   17   27   27   37   37   47   47   47   47   57   67   77   77   87   87   97   97   8   8   8   28   38   38   58   58   58   58   68   78   78   88   98   98   9   9   9   19   29   29   29   39   39   39   49   59   59   59   59   69   79   89   89   89   99   99   99}
+
+do_execsql_test 1.16.11.5 {
+  SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW         AND UNBOUNDED FOLLOWING ) FROM t2
+} {0   90   40   30   80   20   90   60   70   80   90   30   50   10   30   41   81   91   61   91   91   1   81   41   61   1   21   11   51   41   31   31   11   81   91   91   21   2   62   12   32   22   42   2   72   12   22   2   72   72   12   62   52   82   23   33   93   23   93   43   3   43   33   53   63   73   13   73   73   33   93   23   13   33   3   33   83   74   74   54   84   74   24   4   94   84   74   34   34   44   74   64   14   34   84   84   44   34   65   35   85   85   55   15   25   75   95   65   65   35   5   15   95   55   75   85   75   15   95   26   96   46   6   46   16   16   86   56   56   56   16   36   76   96   96   26   26   36   66   36   36   97   27   97   67   77   47   7   47   87   37   87   77   7   57   47   47   37   27   17   7   38   68   78   8   28   98   78   58   98   8   88   8   58   58   58   38   99   89   59   39   99   29   59   89   89   29   9   79   49   59   29   59   19   39   9   9   99   69   39}
+
+do_execsql_test 1.16.11.6 {
+  SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW         AND UNBOUNDED FOLLOWING) FROM t2
+} {0   74   74   26   2   96   38   68   62   46   6   46   78   54   8   84   16   16   86   74   24   12   32   56   22   90   28   56   40   56   16   36   98   76   4   94   42   30   78   2   80   84   72   58   96   98   74   12   8   20   22   88   34   8   34   90   96   60   44   2   74   70   26   26   80   90   36   58   72   72   66   64   12   14   62   36   34   36   58   52   30   50   84   10   84   44   58   30   38   34   82   41   23   99   33   89   81   59   39   91   99   97   27   97   67   29   93   77   23   93   65   35   47   7   61   91   85   85   43   59   3   91   55   15   89   25   47   1   43   75   89   81   33   29   53   63   87   37   41   9   61   73   95   65   13   1   21   65   35   5   73   11   51   87   41   31   31   15   95   73   79   11   49   59   55   75   77   7   85   57   29   59   19   39   47   47   9   33   93   75   81   9   23   37   13   91   91   33   15   99   3   95   69   33   21   39   83   27   17   7}
+
 do_execsql_test 1.17.2.1 {
   SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN 4 FOLLOWING    AND UNBOUNDED FOLLOWING ) FROM t2
 } {99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   99   95   95   84   84   84   84   84   84   84   84   83   83   83   83   83   83   83   83   83   82   82   17   7   {}   {}   {}   {}}
@@ -4545,4 +4929,28 @@ do_execsql_test 1.17.10.6 {
   SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING    AND UNBOUNDED FOLLOWING) FROM t2
 } {{}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}}
 
+do_execsql_test 1.17.11.1 {
+  SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN 4 FOLLOWING    AND UNBOUNDED FOLLOWING) FROM t2
+} {23   99   26   33   2   89   81   96   59   38   68   39   62   91   46   6   99   97   27   46   78   54   97   8   67   29   93   84   77   23   16   16   93   65   35   47   7   86   74   61   91   85   24   85   43   59   12   32   56   3   91   22   90   55   15   28   89   25   47   1   56   40   43   56   16   75   36   89   98   76   81   4   94   42   30   78   33   29   53   63   2   87   37   80   84   72   41   9   61   73   95   65   13   58   96   98   1   21   74   65   35   5   73   11   51   87   41   12   8   20   31   31   15   95   22   73   79   88   34   8   11   49   34   90   59   96   60   55   75   77   44   2   7   85   57   74   29   70   59   19   39   26   26   47   80   90   36   58   47   9   72   72   66   33   93   75   64   81   9   23   37   13   12   14   62   91   36   91   33   15   34   36   99   3   95   69   58   52   30   50   84   10   84   33   21   39   44   58   30   38   34   83   27   82   17   7   {}   {}   {}   {}}
+
+do_execsql_test 1.17.11.2 {
+  SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 FOLLOWING    AND UNBOUNDED FOLLOWING) FROM t2
+} {80   20   90   60   70   80   90   30   50   10   30   {}   {}   {}   {}   91   91   1   81   41   61   1   21   11   51   41   31   31   11   81   91   91   21   {}   {}   {}   {}   22   42   2   72   12   22   2   72   72   12   62   52   82   {}   {}   {}   {}   93   43   3   43   33   53   63   73   13   73   73   33   93   23   13   33   3   33   83   {}   {}   {}   {}   74   24   4   94   84   74   34   34   44   74   64   14   34   84   84   44   34   {}   {}   {}   {}   55   15   25   75   95   65   65   35   5   15   95   55   75   85   75   15   95   {}   {}   {}   {}   46   16   16   86   56   56   56   16   36   76   96   96   26   26   36   66   36   36   {}   {}   {}   {}   77   47   7   47   87   37   87   77   7   57   47   47   37   27   17   7   {}   {}   {}   {}   28   98   78   58   98   8   88   8   58   58   58   38   {}   {}   {}   {}   99   29   59   89   89   29   9   79   49   59   29   59   19   39   9   9   99   69   39   {}   {}   {}   {}}
+
+do_execsql_test 1.17.11.3 {
+  SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN 4 FOLLOWING    AND UNBOUNDED FOLLOWING ) FROM t2
+} {2   2   3   3   4   5   6   7   7   7   8   8   8   9   9   9   10   11   11   12   12   12   13   13   14   15   15   15   16   16   16   17   19   20   21   21   22   22   23   23   23   24   25   26   26   26   27   27   28   29   29   29   30   30   30   31   31   32   33   33   33   33   33   34   34   34   34   35   35   36   36   36   36   37   37   38   38   39   39   39   40   41   41   41   42   43   43   44   44   46   46   47   47   47   47   49   50   51   52   53   54   55   55   56   56   56   57   58   58   58   58   59   59   59   59   60   61   61   62   62   63   64   65   65   65   66   67   68   69   70   72   72   72   73   73   73   74   74   74   74   74   75   75   75   76   77   77   78   78   79   80   80   81   81   81   82   83   84   84   84   84   85   85   85   86   87   87   88   89   89   89   90   90   90   91   91   91   91   91   93   93   93   94   95   95   95   96   96   96   97   97   98   98   99   99   99   {}   {}   {}   {}}
+
+do_execsql_test 1.17.11.4 {
+  SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 FOLLOWING    AND UNBOUNDED FOLLOWING ) FROM t2
+} {30   30   40   50   60   70   80   80   90   90   90   {}   {}   {}   {}   21   21   31   31   41   41   41   51   61   61   81   81   81   91   91   91   91   91   {}   {}   {}   {}   12   12   22   22   32   42   52   62   62   72   72   72   82   {}   {}   {}   {}   23   23   23   33   33   33   33   33   43   43   53   63   73   73   73   83   93   93   93   {}   {}   {}   {}   34   34   34   44   44   54   64   74   74   74   74   74   84   84   84   84   94   {}   {}   {}   {}   25   35   35   55   55   65   65   65   75   75   75   85   85   85   95   95   95   {}   {}   {}   {}   26   26   26   36   36   36   36   46   46   56   56   56   66   76   86   96   96   96   {}   {}   {}   {}   27   27   37   37   47   47   47   47   57   67   77   77   87   87   97   97   {}   {}   {}   {}   38   38   58   58   58   58   68   78   78   88   98   98   {}   {}   {}   {}   29   29   29   39   39   39   49   59   59   59   59   69   79   89   89   89   99   99   99   {}   {}   {}   {}}
+
+do_execsql_test 1.17.11.5 {
+  SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 FOLLOWING    AND UNBOUNDED FOLLOWING ) FROM t2
+} {80   20   90   60   70   80   90   30   50   10   30   41   81   91   61   91   91   1   81   41   61   1   21   11   51   41   31   31   11   81   91   91   21   2   62   12   32   22   42   2   72   12   22   2   72   72   12   62   52   82   23   33   93   23   93   43   3   43   33   53   63   73   13   73   73   33   93   23   13   33   3   33   83   74   74   54   84   74   24   4   94   84   74   34   34   44   74   64   14   34   84   84   44   34   65   35   85   85   55   15   25   75   95   65   65   35   5   15   95   55   75   85   75   15   95   26   96   46   6   46   16   16   86   56   56   56   16   36   76   96   96   26   26   36   66   36   36   97   27   97   67   77   47   7   47   87   37   87   77   7   57   47   47   37   27   17   7   38   68   78   8   28   98   78   58   98   8   88   8   58   58   58   38   99   89   59   39   99   29   59   89   89   29   9   79   49   59   29   59   19   39   9   9   99   69   39   {}   {}   {}   {}}
+
+do_execsql_test 1.17.11.6 {
+  SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING    AND UNBOUNDED FOLLOWING) FROM t2
+} {{}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}   {}}
+
 finish_test