Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 需要区分特定列的内部联接_Sql Server - Fatal编程技术网

Sql server 需要区分特定列的内部联接

Sql server 需要区分特定列的内部联接,sql-server,Sql Server,我正在编写以下存储过程: SELECT invite.sender_id, invite.invite_msg_text, invite.date_sent, person.name_first, person.name_last, member.member_image_url FROM invite INNER JOIN person ON invite.sender_id

我正在编写以下存储过程:

SELECT invite.sender_id,
       invite.invite_msg_text,
       invite.date_sent,
       person.name_first,
       person.name_last,
       member.member_image_url
FROM   invite
       INNER JOIN person
               ON invite.sender_id = person.person_id
       INNER JOIN member
               ON invite.sender_id = member.person_id
WHERE  invite.invite_status = 'P'
       AND invite.recipient_email = @recipientEmail
ORDER  BY invite.date_sent DESC 
但是我想返回具有不同发件人id/个人id的行。如果用户发送了多个邀请,它现在将返回重复的行。是否可以根据发件人id/个人id仅返回不同的行

SELECT invite.sender_id, invite.invite_msg_text, invite.date_sent, person_a.name_first, person_a.name_last, member.member_image_url
FROM invite
INNER JOIN (select person_id, max(name_first) as name_first,max(name_last) as name_last from person group by person_id) as person_a 
ON person_a.person_id = invite.sender_id

你应该完成你想要的

这将为您提供由发件人\u id.发送的最新邀请。。使用行号来确定最后发送的是哪一个

SELECT * FROM 
(
    SELECT invite.sender_id,
           invite.invite_msg_text,
           invite.date_sent,
           person.name_first,
           person.name_last,
           member.member_image_url,
           ROW_NUMBER() OVER (PARTITION BY invite.sender_id ORDER BY invite.date_sent DESC) Rn 
    FROM   invite
           INNER JOIN person
                   ON invite.sender_id = person.person_id
           INNER JOIN member
                   ON invite.sender_id = member.person_id
    WHERE  invite.invite_status = 'P'
           AND invite.recipient_email = @recipientEmail
) t
WHERE t.RN = 1
ORDER BY t.date_sent DESC 

你能分享邀请、个人和成员的模式吗?当然可以。您可以向查询中添加distinct。然而,我怀疑这不会得到你想要的。当您有重复项时,您希望其他列使用哪些值?敏?最大值?聚合是实现这一点的最简单方法,但并不确定您在这里要做什么。是否要发送最近的邀请?是的,最新发送的邀请将是理想的选择。当然,添加您以后的加入和分组方式,等等