Often solutions are never patched and only exported. If this is the case and the version is never manually amended, then only the Revision number increments. For example, a solution that has been exported 15 times and has never been patched, has the version 1.0.0.15. Revision numbers are incremented every time an export is taken irrespective of whether the export is managed or unmanaged.
It is good practice to manually increment the Major or Minor number when significant new functionality is released. In the above case, the next time I export a major release, I would manually change the version to 2.0.0.1. The versioning of a solution can only be manually changed either during export or when a patch or solution is cloned.
Sometimes I see examples of the release date or other information being manually incorporated into the solution version, but for several reasons I am not a fan of this approach. Let me know if you disagree or have another appraoch to solution versioning