我试图从Message表中获取不同的值,但是由于表上的多个联接而无法成功。
SELECT
UR.CHATID,
--U.USERNAME,
MAX(UM.DATETIME)
FROM
USER_REQUEST UR
JOIN
USER_MESSAGE UM ON UR.CHATID = UM.CHATID
JOIN
EXTENSION_USER EU ON EU.ID = UM.CHATUSERID
JOIN
USER_EXTENSION UE ON UE.CHATID = UM.CHATID
JOIN
User U ON U.ID = EU.USERID
WHERE
CR.[CreatedOn] >= '2019-06-4 08:30:00'
AND CR.CREATEDON < '2019-06-04 18:00:00'
GROUP BY
CR.CHATID
此查询将获取不同的记录。由于在包含UserName时也需要UserName,因此无法获得所需的不同结果,因为在USER_MESSAGE表中我有重复的CHATID。
以上查询返回了以下结果:
在包含用户名时,我得到以下结果,其中聊天ID重复:
[![在此处输入图片描述] [2]] [2]
答案 0 :(得分:3)
也许ROW_NUMBER
在这里可能会有所帮助。该答案假设您希望每个聊天组的记录都具有最大的DATETIME
值。
WITH cte AS (
SELECT UR.CHATID, U.USERNAME, UM.DATETIME,
ROW_NUMBER() OVER (PARTITION BY UR.CHATID ORDER BY UM.DATETIME DESC) rn
FROM USER_REQUEST UR
INNER JOIN USER_MESSAGE UM
ON UR.CHATID = UM.CHATID
INNER JOIN EXTENSION_USER EU
ON EU.ID = UM.CHATUSERID
INNER JOIN USER_EXTENSION UE
ON UE.CHATID = UM.CHATID
INNER JOIN User U
ON U.ID = EU.USERID
WHERE
CR.CREATEDON >= '2019-06-04 08:30:00' AND
CR.CREATEDON < '2019-06-04 18:00:00'
)
SELECT
CHATID,
USERNAME,
DATETIME
FROM cte
WHERE rn = 1;