I'm BI & Analytics Expert, i have been working in Enterprises in Middle east and Spain.
I believe i can do your project, here are my answers to your questions
1. Python would be a good option, in order not to make unnecessary load over the server.
2. we have here 2 choices:
-if we will work with PYTHON, then no need to run a query in loop, we will have datasets derived from the tables (based on the dates we need) and working on them to produce the needed variables
-if we will have to work with SQL, then we can use intermediate tables for our calculations to avoid any kind of loops, also in this way we won't redo any calculations as it will be save in intermediate tables.
3. - First we should pick the time where the server is not accessed often to do the processing, for example from Midnight to 6 AM
- There should be a checking points while processing, so in case of any failure during the process, we resume from a checked point and not redo the whole processing.
- Never change the data, just add new data (unless recovery is required)
4. We should start the query/process on the secondary instance. to avoid more delay.
then we check the SQL of the hung query before killing its process, to understand why it did hung, was the reason from the query ? or the reason is from the server ? or the reason could be the table(s) used in the query were having a lock due to inserting of data?