Index: src/resolve.c ================================================================== --- src/resolve.c +++ src/resolve.c @@ -1241,10 +1241,21 @@ if( sqlite3ResolveExprNames(pNC, pE) ){ return 1; } for(j=0; jpEList->nExpr; j++){ if( sqlite3ExprCompare(0, pE, pSelect->pEList->a[j].pExpr, -1)==0 ){ +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pE->pWin ){ + Window **pp; + for(pp=&pSelect->pWin; *pp; pp=&(*pp)->pNextWin){ + if( *pp==pE->pWin ){ + *pp = (*pp)->pNextWin; + break; + } + } + } +#endif pItem->u.x.iOrderByCol = j+1; } } } return sqlite3ResolveOrderGroupBy(pParse, pSelect, pOrderBy, zType); Index: test/window6.test ================================================================== --- test/window6.test +++ test/window6.test @@ -168,8 +168,28 @@ do_execsql_test 7.1 { SELECT count(*) FROM t1 WHERE x LIKE '!' ESCAPE '!'; } {0} +#------------------------------------------------------------------------- +# +do_execsql_test 8.0 { + CREATE TABLE IF NOT EXISTS "sample" ( + "id" INTEGER NOT NULL PRIMARY KEY, + "counter" INTEGER NOT NULL, + "value" REAL NOT NULL + ); + + INSERT INTO "sample" (counter, value) + VALUES (1, 10.), (1, 20.), (2, 1.), (2, 3.), (3, 100.); +} + +do_execsql_test 8.1 { + SELECT "counter", "value", RANK() OVER w AS "rank" + FROM "sample" + WINDOW w AS (PARTITION BY "counter" ORDER BY "value" DESC) + ORDER BY "counter", RANK() OVER w +} { + 1 20.0 1 1 10.0 2 2 3.0 1 2 1.0 2 3 100.0 1 +} finish_test -