alamb opened a new issue, #27267:
URL: https://github.com/apache/datafusion/issues/27267

   ### Describe the bug
   
   A query that computes `MAX(x) OVER (ORDER BY ts)` and then sorts on that 
column with `ASC NULLS LAST` returns rows in the wrong order when `x` contains 
NULLs. The NULL row is returned first, where the query asked for it last.
   
   The same wrong order appears for:
   
   - `MIN(x) OVER (ORDER BY ts)` sorted `DESC NULLS LAST`
   - `MAX(x) OVER (ORDER BY ts ROWS BETWEEN CURRENT ROW AND UNBOUNDED 
FOLLOWING)` sorted `DESC NULLS FIRST`
   
   ### To Reproduce
   
   ```sql
   set datafusion.execution.target_partitions = 1;
   
   CREATE TABLE t(ts INT, x INT) AS VALUES (1, NULL), (2, 3), (3, 1), (4, 5);
   
   SELECT ts, m
   FROM (
     SELECT ts, MAX(x) OVER (ORDER BY ts) AS m
     FROM (SELECT * FROM t ORDER BY ts)
   )
   ORDER BY m ASC NULLS LAST;
   ```
   
   Returns:
   
   ```text
   +----+------+
   | ts | m    |
   +----+------+
   | 1  | NULL |
   | 2  | 3    |
   | 3  | 3    |
   | 4  | 5    |
   +----+------+
   ```
   
   ### Expected behavior
   
   `NULLS LAST` means the NULL row comes after every non-NULL value:
   
   ```text
   +----+------+
   | ts | m    |
   +----+------+
   | 2  | 3    |
   | 3  | 3    |
   | 4  | 5    |
   | 1  | NULL |
   +----+------+
   ```
   
   ### Additional context
   
   `EXPLAIN` shows the final sort on `m` is removed, so the planner believes 
the window output already satisfies `m ASC NULLS LAST`. Reproduced on main at 
94486b1e93.
   
   Found by @jayzhan211 while reviewing the `EquivalenceProperties` docs in 
#27250. The original report and repro are in this review comment: 
https://github.com/apache/datafusion/pull/27250#discussion_r4512590554
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to