Worked it out finally, I added another sub query to give me the max date and then used that in the first sub query to get only one record, it works now.
Other things I tried, sorting the first sub query in descending order and choosing only the top 1, using the max clause in the first sub query neither worked.
Maybe will help someone else though.
Select Top 10000 tblAssets.AssetID As [Asset System ID],
tblAssets.AssetID As RecID,
tsysIPLocations.IPLocation As [Location - Building],
tblAssets.AssetName As [Host Name],
tsysOS.OSname As [Operating System],
tblAssets.Domain As [User Domain],
Left(tblAssetCustom.Serialnumber, 80) As [Serial Number],
Left(tblAssetCustom.Model, 80) As Model,
ProcCapacity.CPU As [CPU Type],
ProcCapacity.Name As [CPU Edition],
ProcCapacity.MaxClockSpeed As [CPU Speed],
ProcCapacity.NrOfProcessors As [Number CPUs],
tblAssetCustom.PurchaseDate As [Purchase Date],
tblAssetCustom.Warrantydate As [Warranty Expires],
tblSystemEnclosure.ChassisTypes,
tblComputersystem.Domainrole,
tblAssets.Memory As [Physical Memory],
tblAssets.Mac As [Mac Address],
tblAssets.Lastseen As [Last Modified Date Time],
tblAssets.Firstseen As [Created Date Time],
tblAssets.Assettype,
tblSystemEnclosure.Manufacturer,
TsysChassisTypes.ChassisName As [Computer Type],
'LANSweeper' As [Asset Source],
Case
When (tblState.Statename) = 'Active' Then 'Active'
When (tblState.Statename) = 'Broken' Then 'Down'
When (tblState.Statename) = 'In repair' Then 'In Repair'
When (tblState.Statename) = 'Stock' Then 'In Stock'
When (tblState.Statename) = 'Spare' Then 'In Stock'
When (tblState.Statename) = 'Non-active' Then 'Retired'
When (tblState.Statename) = 'Stolen' Then 'Stolen/MIA'
Else 'Stolen/MIA'
End As [Selected Status],
Left(tblAssets.SP, 30) As [Operating System Service Pack],
tblAssets.IPAddress As [IP Address],
tblOperatingsystem.SerialNumber As [Operating System License Key],
tblOperatingsystem.Version As [Operating System Version],
tblOperatingsystem.OSLanguage As [Operating System Country Code],
Left(tblBIOS.SMBIOSBIOSVersion, 50) As [BIOS Version],
tblBIOS.ReleaseDate As [BIOS Date],
tblBIOS.Manufacturer As BIOS,
SubQuery.Username As [User Name],
SubQuery1.ThDate,
tblADusers.Name As [Primary User Full Name],
tblADusers.email As [Primary User Email],
Case
When (tsysIPLocations.IPLocation) = 'xxxx' Then 'xxxxx'
Else 'Unknown'
End As [Owned By Team],
Case
When (tsysIPLocations.IPLocation) = 'xxxx' Then 'xxxx'
Else 'Unknown'
End As [Owned By],
Case
When (tsysIPLocations.IPLocation) = 'xxxx' Then 'xxxx'
Else 'Unknown'
End As [Owned By Email]
From tblAssets
Inner Join (Select tblAssets.AssetID,
Max(tblProcessor.MaxClockSpeed) As MaxClockSpeed,
Count(tblProcessor.WIN32_PROCESSORid) As NrOfProcessors,
Max(tblProcessor.MaxClockSpeed) As [total Proc Capacity],
Max(tblProcessor.Architecture) As Architecture,
Max(tblProcessor.Caption) As Name,
Max(Replace(Replace(tblProcessor.Name, '(R)', ''), '(TM)', '')) As CPU
From tblAssets
Inner Join tblProcessor On tblAssets.AssetID = tblProcessor.AssetID
Group By tblAssets.AssetID) ProcCapacity On ProcCapacity.AssetID =
tblAssets.AssetID
Inner Join tblAssetCustom On tblAssets.AssetID = tblAssetCustom.AssetID
Inner Join tsysOS On tblAssets.OScode = tsysOS.OScode
Inner Join tsysIPLocations On tsysIPLocations.LocationID =
tblAssets.LocationID
Inner Join tblSystemEnclosure On
tblAssets.AssetID = tblSystemEnclosure.AssetID
Inner Join TsysChassisTypes On TsysChassisTypes.Chassistype =
tblSystemEnclosure.ChassisTypes
Inner Join tblComputersystem On tblAssets.AssetID = tblComputersystem.AssetID
Inner Join tblOperatingsystem On
tblAssets.AssetID = tblOperatingsystem.AssetID
Inner Join tblBIOS On tblAssets.AssetID = tblBIOS.AssetID
Left Join (Select Top 10000 tblAssetUserRelations.AssetID,
Max(tblAssetUserRelations.StartDate) As ThDate
From tblAssetUserRelations
Where tblAssetUserRelations.Type = 1
Group By tblAssetUserRelations.AssetID) SubQuery1 On SubQuery1.AssetID =
tblAssets.AssetID
Left Join (Select Top 10000 tblAssetUserRelations.AssetID,
tsysAssetRelationTypes.Name,
tblAssetUserRelations.Username,
tblAssetUserRelations.Userdomain,
tblAssetUserRelations.Comments,
tblAssetUserRelations.StartDate
From tblAssetUserRelations
Inner Join tsysAssetRelationTypes On
tsysAssetRelationTypes.RelationTypeID = tblAssetUserRelations.Type
Where tsysAssetRelationTypes.Name = 'owned by'
Order By tblAssetUserRelations.StartDate) SubQuery On SubQuery.AssetID =
tblAssets.AssetID And SubQuery.StartDate = SubQuery1.ThDate
Inner Join tblADusers On tblADusers.Username = SubQuery.Username And
tblADusers.Userdomain = SubQuery.Userdomain
Inner Join tblState On tblState.State = tblAssetCustom.State
Where tblComputersystem.Domainrole = 1
Order By [Location - Building],
[Host Name]