Migrate small sets of data from production to staging/sandbox
The first thing you need to identify in your db are which tables require all their data (the seed data, sometimes called "domain" data), and which tables are suitable for bringing only recent data. You have a couple choices then.

1: Use a tool like SSDT to deploy your SCHEMA to dev &amp; staging, keep the domain data as a bunch of INSERT statements in SSDT and apply those, and then write a custom SSIS package (or use the data transfer wizard, which is just SSIS) to pull only the useful, recent data over the wire.


PRO: this will definitely meet your requirement to pull only the
minimum necessary data.
CON: lots of queries will go over the wire on SSIS, have
to develop separate packages for pretty much every table. Have to keep the packages up-to-date as schema changes hit your db.


2: Backup the whole database, restore it somewhere else, and run a purge script. Then backup the purged db and restore this to dev &amp; staging.


PRO: a pretty simple solution, requiring only DELETE scripts for the older data.
CON: requires another server with enough space to restore your full
backup, lots of time taken in first restore, probably time taken in
delete.


3: Partition your big tables so that data older than a month goes to a new filegroup, and use the Piecemeal restore option to only restore your PRIMARY filegroup.


PRO: A very simple restore process.
CON: Requires design work before the fact to partition the tables.


In our production environment, we have 1.5TB database, and we use option 2. I have tested option 3 with smaller db's and it does work rather well. Option 1 requires no changes to your db, but seems like the most work to me.