This is my full code. It hits the db twice, once to find the total number of posts and once to put them in an array for use in the loop. That could probably be refactored into in a single query, but I am not the best php progger and there are hotter issues on my plate at the moment. I hope it helps, or at least gets you closer to solving your issue.
$total = "
SELECT *,
m1.meta_value AS start_date,
IF( m2.meta_value=0, m1.meta_value, m2.meta_value ) as last_day
FROM {$wpdb->prefix}posts
INNER JOIN {$wpdb->prefix}postmeta m1
ON ( {$wpdb->prefix}posts.ID = m1.post_id )
INNER JOIN {$wpdb->prefix}postmeta m2
ON ( {$wpdb->prefix}posts.ID = m2.post_id )
WHERE {$wpdb->prefix}posts.post_type = 'events'
AND {$wpdb->prefix}posts.post_status = 'publish'
AND ( m1.meta_key = '_startdate' AND m1.meta_value)
AND ( IF( m2.meta_value=0, m1.meta_value, m2.meta_value ) > DATE_FORMAT( NOW(), '%Y%m%d%H%i') )
AND ( m2.meta_key = '_enddate' AND m2.meta_value >= '0' )
GROUP BY {$wpdb->prefix}posts.ID
ORDER BY start_date
ASC;
";
$totalevents = $wpdb->get_results( $total, OBJECT );
$ppp = intval( get_query_var( 'posts_per_page' ) );
$wp_query->found_posts = count( $totalevents );
$wp_query->max_num_pages = ceil( $wp_query->found_posts/$ppp );
$on_page = intval( get_query_var( 'paged' ) );
if( $on_page == 0 ){ $on_page = 1; }
$offset = ( $on_page-1 ) * $ppp;
$wp_query->request = "
SELECT *,
m1.meta_value AS start_date,
IF( m2.meta_value=0, m1.meta_value, m2.meta_value ) as last_day
FROM {$wpdb->prefix}posts
INNER JOIN {$wpdb->prefix}postmeta m1
ON ( {$wpdb->prefix}posts.ID = m1.post_id )
INNER JOIN {$wpdb->prefix}postmeta m2
ON ( {$wpdb->prefix}posts.ID = m2.post_id )
WHERE {$wpdb->prefix}posts.post_type = 'events'
AND {$wpdb->prefix}posts.post_status = 'publish'
AND ( m1.meta_key = '_startdate' AND m1.meta_value)
AND ( IF( m2.meta_value=0, m1.meta_value, m2.meta_value ) > DATE_FORMAT( NOW(), '%Y%m%d%H%i') )
AND ( m2.meta_key = '_enddate' AND m2.meta_value >= '0' )
GROUP BY {$wpdb->prefix}posts.ID
ORDER BY start_date
ASC
LIMIT $ppp
OFFSET $offset;
";
$events = $wpdb->get_results($wp_query->request, OBJECT);
if ( $events ) : foreach ( $events as $post ) : setup_postdata( $post );
// YOUR LOOP GOES HERE
endforeach;
endif; ?>