Give this a try:
Select Top 1000000
tblAssets.AssetID,
tblAssets.AssetName,
tsysAssetTypes.AssetTypename,
tsysAssetTypes.AssetTypeIcon10 As icon,
tblAssets.IPAddress,
tblAssets.Lastseen,
tblAssets.Lasttried
From tblAssets
Inner Join tblAssetCustom On tblAssets.AssetID = tblAssetCustom.AssetID
Inner Join tsysAssetTypes On tsysAssetTypes.AssetType = tblAssets.Assettype
Inner Join (SELECT
tblCPlogoninfo.AssetID,
Count(*) AS LogonCount
FROM
tblCPlogoninfo
Inner Join tblADusers On tblCPlogoninfo.Domain = tblADusers.Userdomain And tblCPlogoninfo.Username = tblADusers.Username
WHERE
tblCPlogoninfo.logontime >= GetDate() - 90
AND tblADUsers.OU LIKE '%your_ou_text%'
GROUP BY
tblCPlogoninfo.AssetID
) AS OULogons ON OULogons.AssetID = tblAssets.AssetID
Where
tblAssetCustom.State = 1
tblCPlogoninfo contains the historical logon events. Link that against tblADusers to get the user AD info.
The sub-SELECT should pull the historical list of logins that meet your 90-day & OU requirements. The INNER JOIN against it will limit the main SELECT to only those assets that appear in the sub-SELECT list.
The Count(*) in the sub-SELECT is optional; I used to for testing. If you don't care about it, you could as easily:
Select Top 1000000
tblAssets.AssetID,
tblAssets.AssetName,
tsysAssetTypes.AssetTypename,
tsysAssetTypes.AssetTypeIcon10 As icon,
tblAssets.IPAddress,
tblAssets.Lastseen,
tblAssets.Lasttried
From tblAssets
Inner Join tblAssetCustom On tblAssets.AssetID = tblAssetCustom.AssetID
Inner Join tsysAssetTypes On tsysAssetTypes.AssetType = tblAssets.Assettype
Inner Join (SELECT Distinct
tblCPlogoninfo.AssetID
FROM
tblCPlogoninfo
Inner Join tblADusers On tblCPlogoninfo.Domain = tblADusers.Userdomain And tblCPlogoninfo.Username = tblADusers.Username
WHERE
tblCPlogoninfo.logontime >= GetDate() - 90
AND tblADUsers.OU LIKE '%your_ou_text%'
) AS OULogons ON OULogons.AssetID = tblAssets.AssetID
Where
tblAssetCustom.State = 1