【发布时间】:2016-06-14 19:02:06
【问题描述】:
我有一张这样的桌子
ParsereplyId Message Callid status EMailid subject
------------------------------------------------------------------------
1 hi 2222 Replied g.m.p@m.com Log a cll
2 hello 2222 Replied g.m.p@m.com Re:
3 hi2 2222 New g.m.p@m.com Re:log a cll
4 hello2 2223 Read g.p@m.com Log a cldf
5 how r u 2223 New g.p@m.com Re:Log a
从上表我想得到以下输出:
ParsereplyId Message Callid status EMailid subject
-------------------------------------------------------------------
3 hi2 2222 New g.m.p@m.com Re:log a cll
5 how r u 2223 New g.p@m.com Re:Log a
我尝试了以下查询。 但我想在左外连接中做到这一点
SELECT A.[ParsedReplyId]
, A.[EMailId]
, A.[Message]
, A.[CallId]
, [UM_User].[UserName]
FROM IM_IncidentReplyMail AS A
INNER JOIN
(SELECT MAX(ParsedReplyId) AS parseid
FROM [IM_IncidentReplyMail]
GROUP BY [CallId]) AS B
INNER JOIN
[UM_User] ON [UM_User].[EmailId] = A.[EmailId]
WHERE
B.parseid = A.[ParsedReplyId]
如何实现上面的sql查询到inner join??
编辑:我更正了我上面的错误
UM_USer 表包含username, emailid,基于两个表中的电子邮件 ID,我可以获取该邮件的用户名。
编辑 2: 我可以使用左外连接而不是像使用内连接
SELECT A.[ParsedReplyId]
, A.[EMailId]
, A.[Message]
, A.[CallId]
, [UM_User].[UserName]
FROM IM_IncidentReplyMail AS A
LEFT OUTER JOIN
(SELECT MAX(ParsedReplyId) AS parseid
FROM [IM_IncidentReplyMail]
GROUP BY [CallId]) AS B
ON 1=1
LEFT OUTER JOIN
[UM_User] ON [UM_User].[EmailId] = A.[EmailId]
WHERE
B.parseid = A.[ParsedReplyId]
这里我使用了 1=1 条件,这不是在查询中使用的正确方法。它使我的代码难看。所以我请你帮忙解决这个问题。
【问题讨论】:
-
您知道您在
INNER和JOIN之间缺少一个空格,对吗? -
正确给出表格的详细信息...
-
我假设这是您正在使用的 SQL Server,对吗?您想要每个 CallID 组的 ParsedReplyID 最高的记录吗?如果是这样,你可以这样做
select * from tablename a inner join (select max(parsedreplyid) as mp, callid from tablename group by callid) b on a.parsedreplyid = b.mp -
@zedfoxus:我想要的确切输出由先前的评论给出。现在我想在左外连接中做到这一点。
-
@Gomathipriya 您能看到下面的查询将帮助您获得所需的输出
标签: sql sql-server rdbms