La clé pour déboguer des situations comme celles-ci est d'exécuter la sous-requête / vue en ligne seule pour voir quelle est la sortie:
SELECT TOP 1
dm.marker_value,
dum.profile_id
FROM DPS_USR_MARKERS dum (NOLOCK)
JOIN DPS_MARKERS dm (NOLOCK) ON dm.marker_id= dum.marker_id
AND dm.marker_key = 'moneyBackGuaranteeLength'
ORDER BY dm.creation_date
En exécutant cela, vous verriez que la profile_idvaleur ne correspond pas à la u.idvaleur de u162231993, ce qui expliquerait pourquoi des mbgréférences reviendraient null(grâce à la jointure de gauche; vous n'obtiendrez rien s'il s'agissait d'une jointure interne).
Vous vous êtes codé dans un coin en utilisant TOP, car vous devez maintenant modifier la requête si vous souhaitez l'exécuter pour d'autres utilisateurs. Une meilleure approche serait:
SELECT u.id,
x.marker_value
FROM DPS_USER u
LEFT JOIN (SELECT dum.profile_id,
dm.marker_value,
dm.creation_date
FROM DPS_USR_MARKERS dum (NOLOCK)
JOIN DPS_MARKERS dm (NOLOCK) ON dm.marker_id= dum.marker_id
AND dm.marker_key = 'moneyBackGuaranteeLength'
) x ON x.profile_id = u.id
JOIN (SELECT dum.profile_id,
MAX(dm.creation_date) 'max_create_date'
FROM DPS_USR_MARKERS dum (NOLOCK)
JOIN DPS_MARKERS dm (NOLOCK) ON dm.marker_id= dum.marker_id
AND dm.marker_key = 'moneyBackGuaranteeLength'
GROUP BY dum.profile_id) y ON y.profile_id = x.profile_id
AND y.max_create_date = x.creation_date
WHERE u.id = 'u162231993'
Avec cela, vous pouvez changer le id valeur de la whereclause pour vérifier les enregistrements de n'importe quel utilisateur du système.