In the MLS you can do a free form select to get an area you want data for and you can put a time range. You could also use zip codes but it wouldn't be as accurate.
1) price per sqft you can get. To get it over a function of time simply pull multiple reports for different time ranges.
2) and 3) also exists in the MLS reports you can pull and you'd follow the same steps as 1 to get it as a function over time
4) you can select sold properties on the MLS so that's no problem either. Not sure if the percent is readily there but you can pull all for sale and all sold and divide. Be careful there is a limit to how many addresses you can pull on a single report. You could just look at the results instead of downloading a report.
As for getting this data from other than the MLS, I'd try looking into Zillows APIs and seeing what type of data you can get. It will be a lot more than their UI offers.
If that doesn't work and you don't have access to the MLS then try asking an investor friendly agent to pull some reports for you. Local meet ups are a great way to find one.