Only the most recent version of an interface needs to be implemented. Other versions are handled by having thunks convert their parameters and call the root version.
Not all interface versions have thunks. Some versions could be combined because their parameters were compatible. For example if a structure changes but the structure has a dwSize field, methods using that structure are compatible, as long as the implementation remembers to take the dwSize into account.
Interface thunks for Direct3D are more complicated since the paradigm changed between versions.