Concrete stains fade overtime usually because they are not maintained with a sealer (unless you used an interior stain for exterior).
If you leave concrete unsealed and as people continuously walk on the surface, the concrete will erode overtime. You can see this by looking at very old concrete and noticing that you are unable to see the broom finish that was once applied to the cream surface, instead you see the aggregate in the concrete.
When the concrete has been stained (which colors the cream of the concrete), and the cream of the concrete starts to erode, so will that stain. To prevent this from happening we apply a surface sealer on top of the concrete. Then the sealer will become the wear surface instead of the concrete, protecting the stain.
Once the sealer has been eroded, it is important to apply another coat of sealer to protect the concrete. If you don’t the concrete along with the stain will erode or fade.
For interior stained surfaces, it is easier to prevent the stain to fade because you apply the sealer to protect the stain, but then you apply multiple coats of wax to protect the sealer. You should never have to re-seal the concrete in this situation because all you have to do when the stained floor look dull is apply more coats of wax, which are easier to apply then the sealer.