WP Group posts by year(desc) > month(desc) > date(asc)

$last_month = null;
$args = array(
    'post_type' => 'post',
    'orderby' => 'meta_value',
    'order' => 'DESC',
    'post_status' => 'publish'
);

$the_query = new WP_Query($args);

while ( $the_query->have_posts() ) :
    $the_query->the_post();
    $the_month = get_the_time( 'Ym' ); // e.g. 201611

    if ( $last_month !== $the_month ) {
        if ( $last_month !== null ) {
            // Close previously opened <div class="row" />
            echo '</div>';
        }

        echo '<br/><div class="row '.get_the_time("Y").'" >';
        echo 'MOnth: '.get_the_time('m');

    }

    $last_month = $the_month;

    ?>

    <div class="col-3">
        <?php the_title(); ?>
    </div>

    <?php

    if ( $the_query->current_post + 1 === $the_query->post_count ) {
        // Last item, always close the div
        echo '</div>';
    }

endwhile;