We've been looking too for some kind of report that shows 'real' OS upgrades. This might show what you're looking for (though I'm not 100% convinced 😅 😞
Select Top 1000 tblAssets.AssetName,
a.*
From tblOperatingsystemHist As a
Inner Join tblAssets On tblAssets.AssetID = a.AssetID
Where a.Caption <> (Select Top 1 b.Caption From tblOperatingsystemHist As b
Where a.AssetID = b.AssetID And a.Trackercode > b.Trackercode Order By
b.Trackercode Desc) And a.Lastchanged > GetDate() - 30
Order By tblAssets.AssetName