diff --git a/src/box/sql/window.c b/src/box/sql/window.c
index 9e2bd5236c822098218450446bba8b8f8160fd25..629a5d20749038b86d5911a395738bc23f6d5911 100644
--- a/src/box/sql/window.c
+++ b/src/box/sql/window.c
@@ -358,7 +358,7 @@ int
 sqlWindowRewrite(Parse *pParse, Select *p)
 {
 	int rc = 0;
-	if (p->pWin) {
+	if (p->pWin && p->pPrior == 0) {
 		Vdbe *v = sqlGetVdbe(pParse);
 		/* The subquery */
 		Select *pSub = 0;
diff --git a/test/sql-tap/window1.test.lua b/test/sql-tap/window1.test.lua
index 2575f4cb5b13cc6a7ab9f76c9977bb53fe0a5167..145c3a7487e70f7443906a6a115f5dddf9cd45db 100755
--- a/test/sql-tap/window1.test.lua
+++ b/test/sql-tap/window1.test.lua
@@ -1,6 +1,6 @@
 #!/usr/bin/env tarantool
 local test = require("sqltester")
-test:plan(59)
+test:plan(66)
 
 test:execsql( [[
     DROP TABLE IF EXISTS t1;
@@ -750,4 +750,72 @@ test:do_execsql_test(
         '1', '1.5', '2.5', '3.5'
     })
 
+-- NOTE(gmoshkin): had to change query in test, because tarantool requires a
+-- primary key to be specified for all tables
+test:do_execsql_test(
+    "window1-13.1",
+    [[
+  DROP TABLE IF EXISTS t1;
+  CREATE TABLE t1(a int primary key, b int);
+  INSERT INTO t1 VALUES(1,11);
+  INSERT INTO t1 VALUES(2,12);
+    ]]
+)
+
+-- NOTE(gmoshkin): had to split this test into 2, because tarantool doesn't
+-- support multiple queries in one call to box.execute
+test:do_execsql_test(
+    "window1-13.2.1.1",
+    [[
+  SELECT a, row_number() OVER(ORDER BY b) FROM t1;
+    ]],
+    { 1, 1,   2, 2, }
+)
+test:do_execsql_test(
+    "window1-13.2.1.2",
+    [[
+  SELECT a, row_number() OVER(ORDER BY b DESC) FROM t1;
+    ]],
+    { 2, 1,   1, 2, }
+)
+
+test:do_execsql_test(
+    "window1-13.2.2",
+    [[
+  SELECT a, row_number() OVER(ORDER BY b) FROM t1
+    UNION ALL
+  SELECT a, row_number() OVER(ORDER BY b DESC) FROM t1;
+    ]],
+    { 1, 1,   2, 2,   2, 1,   1, 2, }
+)
+test:do_execsql_test(
+    "window1-13.3",
+    [[
+  SELECT a, row_number() OVER(ORDER BY b) FROM t1
+    UNION
+  SELECT a, row_number() OVER(ORDER BY b DESC) FROM t1;
+    ]],
+    { 1, 1,   1, 2,   2, 1,   2, 2, }
+)
+
+test:do_execsql_test(
+    "window1-13.4",
+    [[
+  SELECT a, row_number() OVER(ORDER BY b) FROM t1
+    EXCEPT
+  SELECT a, row_number() OVER(ORDER BY b DESC) FROM t1;
+    ]],
+    { 1, 1,   2, 2, }
+)
+
+test:do_execsql_test(
+    "window1-13.5",
+    [[
+  SELECT a, row_number() OVER(ORDER BY b) FROM t1
+    INTERSECT
+  SELECT a, row_number() OVER(ORDER BY b DESC) FROM t1;
+    ]],
+    {}
+)
+
 test:finish_test()