Sql 如何请求在房间中显示最新消息
我在聊天。我有4张桌子: 房间 信息 客人 使用者 在messages表中存储消息,在Users-Users表中,Guest-将访客存储在房间中。房间就像一个对话或对话。 我想请求获取特定用户为客人的每个房间的最新消息Sql 如何请求在房间中显示最新消息,sql,sql-server,inner-join,chat,Sql,Sql Server,Inner Join,Chat,我在聊天。我有4张桌子: 房间 信息 客人 使用者 在messages表中存储消息,在Users-Users表中,Guest-将访客存储在房间中。房间就像一个对话或对话。 我想请求获取特定用户为客人的每个房间的最新消息 SELECT DISTINCT TOP (15) r.id_room, r.type_room, r.name_room, m.content_message, m.image_message, m.file_message, m.date_message
SELECT DISTINCT TOP (15) r.id_room, r.type_room, r.name_room,
m.content_message, m.image_message,
m.file_message, m.date_message, u.person
FROM Rooms AS r
INNER JOIN Guest AS g ON g.id_room = r.id_room
INNER JOIN Users AS u ON u.id_user = g.id_user
INNER JOIN Messages AS m ON m.id_room = r.id_room
WHERE g.id_user = 'OCI59TNG8ZZ'
ORDER BY m.date_message DESC
他显示了房间里的所有信息
我认为如果没有重复的id_房间,这个请求会很好。
但是我不知道怎么做你可以试试这个:
SELECT id_room,
type_room,
name_room,
content_message,
image_message,
file_message,
date_message,
person
FROM (
SELECT r.id_room,
r.type_room,
r.name_room,
m.content_message,
m.image_message,
m.file_message,
m.date_message,
u.person,
ROW_NUMBER() OVER(PARTITION BY R.ID_ROOM ORDER BY m.date_message DESC) AS RN
FROM Rooms AS r
INNER JOIN Guest AS g ON g.id_room = r.id_room
INNER JOIN Users AS u ON u.id_user = g.id_user
INNER JOIN Messages AS m ON m.id_room = r.id_room
WHERE g.id_user = 'OCI59TNG8ZZ'
) V1
WHERE V1.RN = 1
使用通用表表达式,如下所示:
WITH CTE AS (
SELECT r.id_room,
r.type_room,
r.name_room,
m.content_message,
m.image_message,
m.file_message,
m.date_message,
u.person,
ROW_NUMBER() OVER(PARTITION BY R.ID_ROOM ORDER BY m.date_message DESC) rn
FROM Rooms AS r
INNER JOIN Guest AS g ON g.id_room = r.id_room
INNER JOIN Users AS u ON u.id_user = g.id_user
INNER JOIN Messages AS m ON m.id_room = r.id_room
WHERE g.id_user Like 'OCI59TNG8ZZ'
)
SELECT * FROM CTE WHERE rn = 1
最好显示表格的DDL而不是图片。这是否回答了您的问题?您是否忘记了“结束”条款中的“DESC”?出于某种原因,m.date_的订单消息在该答案中不起作用…@Сцццц刚刚在“结束”条款中添加了DESC。它应该是有效的