Bạn dường như cần "hiển thị" sớm nhất cho mỗi người dùng. Sau đó, bạn có thể tổng hợp theo các giao dịch sau thời điểm đó:
SELECT dl.appid, SUM(dl.type = 'click') / SUM(dl.type = 'imp')
FROM dialoglog dl LEFT JOIN
(SELECT dl2.userId, MIN(ds) as imp_ds
FROM dialoglog dl2
WHERE type = 'imp'
GROUP BY dl2.userid
) dlimp
ON dl.userid = dlimp.userid
WHERE dl.ds >= dlimp.imp_ds
GROUP BY dl.appid;