I do not have much time to explain this, but the below formula will add a column for "Bob" and "Robert" and to each set of data and join both sets as an array, return it to the query and sort the result by the date column. There are differences between regions and your sample sheet wanted me to use ; when normally use , and \ where I wold use , in the array definition: { range1 , range2 } vs { range1 \ range2 }
=QUERY(
{ARRAYFORMULA({IF(ISBLANK(Bob!A3:A);;"Bob") \Bob!A3:G});
ARRAYFORMULA({IF(ISBLANK(Robert!A3:A);;"Robert") \Robert!A3:G})};
"select * where Col1 <> '' order by Col2")
Put that in cell A2 and you shouyld be good. You can use IMPORTRANGE() to bringhte data in from different sheets as well.
Edit:
In the answer above I missed that the data has 3 sets of values across each row which the OP desires to be stacked. To do this we nest query() functions for the initial data and return the appropriate columns in each:
=QUERY(
{
QUERY(
{
ARRAYFORMULA({IF(ISBLANK(Bob!A3:A);;"Bob") \Bob!A3:G});
ARRAYFORMULA({IF(ISBLANK(Robert!A3:A);;"Robert") \Robert!A3:G})
};
"select Col1, Col2, Col3, Col4 where Col1 <> ''"; 0);
QUERY(
{
ARRAYFORMULA({IF(ISBLANK(Bob!A3:A);;"Bob") \Bob!A3:G});
ARRAYFORMULA({IF(ISBLANK(Robert!A3:A);;"Robert") \Robert!A3:G})
};
"select Col1, Col2, Col5, Col6 where Col1 <> ''"; 0);
QUERY(
{
ARRAYFORMULA({IF(ISBLANK(Bob!A3:A);;"Bob") \Bob!A3:G});
ARRAYFORMULA({IF(ISBLANK(Robert!A3:A);;"Robert") \Robert!A3:G})
};
"select Col1, Col2, Col7, Col8 where Col1 <> ''"; 0)
};
"select * order by Col2"; 0)
This returns only rows with valid data in the first set of queries and then orders them in the last query.