To pick latest result from your group (domains) you can rewrite your query as below and it would be easier to translate this query in DQL and query builder
SQL
SELECT
a.*
FROM
domain_check_result a
LEFT JOIN domain_check_result b
ON a.domain_id = b.domain_id
AND a.checkDate < b.checkDate
WHERE b.checkDate IS NULL
ORDER BY a.checkDate DESC
DQL
SELECT a
FROM AppBundle\Entity\DomainCheckResult a
LEFT JOIN AppBundle\Entity\DomainCheckResult b
WITH a.domain = b.domain
AND a.checkDate < b.checkDate
WHERE b.checkDate IS NULL
ORDER BY a.checkDate DESC
And in query you could translate your DQL as
$repo = $DM->getRepository( 'AppBundle\Entity\DomainCheckResult' );
$results = $repo->createQueryBuilder( 'a' )
->select( 'a' )
->leftJoin(
'AppBundle\Entity\DomainCheckResult',
'b',
'WITH',
'a.domain = b.domain AND a.checkDate < b.checkDate'
)
->where( 'b.checkDate IS NULL' )
->orderBy( 'a.checkDate','DESC' )
->getQuery()
->getResult();
Reference: Doctrine Query Language get Max/Latest Row Per Group