In the past I've used MSSQL's Temporal Tables (also called System-Versioned Tables) to implement this kind of functionality. This also gets you, for free, Type 2 SCD functionality for OLAP-style queries.
I can't wait until Postgres has this kind of functionality baked in. It's such a nice feature.