Expected Result:- 0:49:05
Below is for BigQuery Standard SQL
SELECT FORMAT('%i%s',
DIV(DATETIME_DIFF(date1, date2, MINUTE), 60),
FORMAT_TIME(':%M:%S', TIME(DATETIME_ADD(DATETIME(TIMESTAMP(DATE(1970, 1, 1))), INTERVAL DATETIME_DIFF(date1, date2, SECOND) SECOND)))
) AS diff
For DATETIME '2019-07-05 17:42:06' date1, DATETIME '2019-07-02 15:53:01' date2 it gives
diff
73:49:05
For DATETIME '2019-07-02 17:42:06' date1, DATETIME '2019-07-02 15:53:01' date2 result is
diff
1:49:05
For DATETIME '2019-07-02 16:42:06' date1, DATETIME '2019-07-02 15:53:01' date2 (as in your question) result is
diff
0:49:05
If you know that the difference will be within 24 hours you can use simpler statement as below
FORMAT_TIME('%T', TIME(DATETIME_ADD(DATETIME(TIMESTAMP(DATE(1970, 1, 1))), INTERVAL DATETIME_DIFF(date1, date2, SECOND) SECOND)))
For last two examples result will be respectively 01:49:05 and 00:49:05