I am writing a pair of queries for a site with an events listing function. Events can be either on a single date or over several (multi-day). All events have a value in custom field `event_date`. Multi-day events also have an `end_date` value.

Single day events should be in the 'upcoming events' list (first query) until the end of their `event_date`, and multi-day events should stay until the end of their `end_date`. Once they are no longer in the upcoming list they should move to the 'past events' list (new query, same page).

The upcoming query works perfectly. Multi-day events stay in the list between their `event_date` and `end_date` values:

```php
$now     = date('Ymd', strtotime("now"));
$future  = date('Ymd', strtotime("+24 months"));
$uc_args = array(
	'post_type'  => 'event',
	'meta_query' => array(
		'relation' => 'OR',
 		// check post has end_date and it is between $now and $future
 		array(
  			'key'     => 'end_date',
  			'compare' => 'BETWEEN',
  			'type'    => 'NUMERIC',
  			'value'   => array($now, $future),
 		),
 		// if no end date check event_date is between $now and $future
 		array(
  			'key'     => 'event_date',
  			'compare' => 'BETWEEN',
  			'type'    => 'NUMERIC',
  			'value'   => array($now, $future),
 		),
	),
	'meta_key' => 'event_date',
	'orderby'  => 'meta_value',
	'order'    => 'ASC',
	'nopaging' => true,
);

```

The past query is constructed exactly the same way, but multi-day events are appearing once their `event–date` has passed, even if they have an `end_date` value:

```php
$past    = date('Ymd', strtotime("-999 months"));
$now     = date('Ymd', strtotime("now"));
$uc_args = array(
	'post_type'  => 'event',
	'meta_query' => array(
		'relation'	=> 'OR',
		// check post has end_date and it is between $past and $now
		array(
			'key'     => 'end_date',
			'compare' => 'BETWEEN',
			'type'    => 'NUMERIC',
			'value'   => array($past, $now),
		),
		// if no end date check event_date is between $past and $now
		array(
			'key'     => 'event_date',
			'compare' => 'BETWEEN',
			'type'    => 'NUMERIC',
			'value'   => array($past, $now),
		),
	),
	'meta_key'       => 'event_date',
	'orderby'        => 'meta_value',
	'order'          => 'DESC',
	'nopaging'       => false,
	'posts_per_page' => '8',
);

```

I can see how an OR relation would include all posts which meet either criteria, but it doesn't do this in the first query. So far as I know there is no ELSE relation but that is the idea I am aiming for here.

Why does this work for upcoming events but not for past events?