需要一些sql的帮助。我试图得到明显的frompersonid,但我想仍然选择所有的列。我也希望最终通过MessageDateTime订购它。
SELECT [MessageID]
,[ToPersonID]
,[FromPersonID]
,[MessageText]
,[MessageDateTime]
,[ViewedByPerson]
FROM dbo.Message
编辑:
让我试着澄清一点。说我有一张包含这些值的表格。
messageid toPerson FromPerson text
1 Andy John kdfjskjf
2 Andy John kdfjsdkj
3 Andy Bob kjfksdj
I am wanting to just display last message in the conversation between Andy and John so my results should be
messageid toPerson FromPerson
2 Andy John
3 Andy Bob
答案 0 :(得分:3)
您显然正在使用MS SQL Server(或者可以想象为Sybase)。你真的不需要方括号;至少在我看来,它们严重限制了SQL的可读性。
您希望在给定的'FromPersonID'中看到哪些值?
你可以这样做:
SELECT MAX(MessageID) AS MessageID,
MIN(ToPersonID) AS ToPersonID,
FromPersonID AS FromPersonID,
MIN(MessageText) AS MessageText,
MAX(MessageDateTime) AS MessageDateTime,
MIN(ViewedByPerson) AS ViewedByPerson
FROM politicprofiles.dbo.Message
GROUP BY FromPersonID
ORDER BY MessageDateTime
这有点任意选择一个值与给定的唯一'FromPersonID'相关联;一般来说,这些值不会来自单行数据,但您没有指定您想要一些代表性的数据行 - 只是您希望每个列都有一些值。
如果您考虑到哪些数据应该针对FromPersonID具有多个记录的情况显示数据,那么还有其他方法可以对查询进行编码。但是,您最终可能会执行子查询以为每个FromPersonID标识一条消息(可能基于最近的MessageDateTime),然后从主数据表中选择与FromPersonID和最新MessageDateTime匹配的行。那个PersonID:
SELECT M.MessageID,
M.ToPersonID,
M.FromPersonID,
M.MessageText,
M.MessageDateTime,
M.ViewedByPerson
FROM politicprofiles.dbo.Message AS M
JOIN (SELECT FromPersonID, MAX(MessageDateTime) AS MessageDateTime
FROM politicprofiles.dbo.Message
GROUP BY FromPersonID) AS R
ON M.FromPersonID = R.FromPersonID AND M.MessageDateTime = R.MessageDateTime
ORDER BY M.MessageDateTime, FromPersonID