Q:

Why does LAG return null for all but one row?

I’m attempting to fetch rows that are ranked second in a group, along with a value from the previous (first-ranked) row using LAG.
However, applying the condition where place = 2 causes the result set to only have a LAG result for the first row.
Including a LEAD column causes the expected result to be shown in the LAG column.
I’m using Oracle 19c and the table I’m working with looks like this:
UKNUM PARTY   UKVOTES
----- ------ --------
    1 con        6605
    1 lab       23745
    1 lib        8206
    1 plaid      1859

There are at least three rows for each uknum, and all of the columns are non-null.
This is my query, intended to fetch the second-placed rows (by ukvotes) with the ukvotes value for the first-placed rows:
SELECT
  *
FROM
  (
    SELECT
      uknum,
      rank() OVER (PARTITION BY uknum ORDER BY ukvotes DESC) AS place,
      lag(ukvotes) OVER (PARTITION BY uknum ORDER BY ukvotes DESC) AS lag
    FROM
      ukresults
  )
WHERE
  place = 2
  AND uknum BETWEEN 1 AND 5;

This yields the following results:
     UKNUM      PLACE        LAG
---------- ---------- ----------
         1          2      23745
         2          2
         3          2
         4          2
         5          2

I would expect that for rows 2-5 there would be a non-null value in the LAG column.
Adding LEAD to the query causes the LAG column to contain the expected results:
SELECT
  *
FROM
  (
    SELECT
      uknum,
      rank() OVER (PARTITION BY uknum ORDER BY ukvotes DESC) AS place,
      lag(ukvotes) OVER (PARTITION BY uknum ORDER BY ukvotes DESC) AS lag,
      lead(ukvotes) OVER (PARTITION BY uknum ORDER BY ukvotes DESC) AS lead
    FROM
      ukresults
  )
WHERE
  place = 2
  AND uknum BETWEEN 1 AND 5;

     UKNUM      PLACE        LAG       LEAD
---------- ---------- ---------- ----------
         1          2      23745       6605
         2          2      19262       7426
         3          2      15393      10372
         4          2      31288       6070
         5          2      24148      11599

I’m confused as to why the first query does not produce the expected results, with a LAG value for all of the rows.
Here’s a DBFiddle with the data and the queries loaded.
Update: here are the query plans from Oracle 19c, first for the query using LAG only, then one for LEAD by itself or LAG and LEAD together (plan is the same for either query containing LEAD).
LAG only plan:
--------------------------------------------------------------------------------------
| Id  | Operation                | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT         |           |   197 |  7683 |     5  (20)| 00:00:01 |
|*  1 |  VIEW                    |           |   197 |  7683 |     5  (20)| 00:00:01 |
|*  2 |   WINDOW SORT PUSHED RANK|           |   197 |  1773 |     5  (20)| 00:00:01 |
|   3 |    TABLE ACCESS CLUSTER  | UKRESULTS |   197 |  1773 |     4   (0)| 00:00:01 |
|*  4 |     INDEX RANGE SCAN     | UKNUMX    |     1 |       |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("PLACE"=2)
   2 - filter(RANK() OVER ( PARTITION BY "UKNUM" ORDER BY
              INTERNAL_FUNCTION("UKVOTES") DESC )<=2)
   4 - access("UKNUM"<=50)

LEAD only / LAG and LEAD plan:
------------------------------------------------------------------------------------
| Id  | Operation              | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |           |   197 |  7683 |     5  (20)| 00:00:01 |
|*  1 |  VIEW                  |           |   197 |  7683 |     5  (20)| 00:00:01 |
|   2 |   WINDOW SORT          |           |   197 |  1773 |     5  (20)| 00:00:01 |
|   3 |    TABLE ACCESS CLUSTER| UKRESULTS |   197 |  1773 |     4   (0)| 00:00:01 |
|*  4 |     INDEX RANGE SCAN   | UKNUMX    |     1 |       |     2   (0)| 00:00:01 |
------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("PLACE"=2)
   4 - access("UKNUM"<=50)

A:

It looks like a bug in optimizer.
As if it pushed the WHERE place = 2 filter to the main query after evaluating RANK, but before evaluating LAG. But, only after the first row.
It produces even weirder results with WHERE place = 1. 
If I change the Oracle version to 11g in the dbfiddle, it produces expected results.
Maybe, it is a bug in dbfiddble?

