假设我有一个包含2列的表格,如下所示:
Person1, Person2
David Jessica
Jessica David
David Oz
Oz David
Guy Richard
Richard Guy
Jessica Oz
Oz Jessica
和另一个包含2列的表格:
Person Last Posted
David 12/8/2016
Jessica 5/10/2016
Oz 23/11/2016
Guy 8/3/2016
Richard 27/6/2016
假设玩家名称是唯一的,并且只会出现一次。 如何选择最新帖子的人? 这个例子的相关组是(David,Jessica,Oz),(Guy,Richard)
输出应为:
Person
Oz
Richard
答案 0 :(得分:1)
这个应该有效。在第一个子查询中,称为获胜者,列出每个配对的最新帖子的人。然后将其连接到名为loser的第二个子查询,该查询列出每个配对中具有最近帖子的人。输出应该返回获胜者子查询中的人而不是输家中的人。进入失败者子查询会证明你小组中的某个人有比你更近的帖子:
SELECT DISTINCT winner.person
FROM
(SELECT
CASE WHEN t2_1.last_post > t2_2.last_post THEN person1 ELSE person2 END AS person
FROM t1
INNER JOIN t2 t2_1 ON t1.person1 = t2_1.person
INNER JOIN t2 t2_2 ON t1.person2 = t2_2.person) winner
LEFT JOIN
(SELECT
CASE WHEN t2_1.last_post < t2_2.last_post THEN person1 ELSE person2 END AS person
FROM t1
INNER JOIN t2 t2_1 ON t1.person1 = t2_1.person
INNER JOIN t2 t2_2 ON t1.person2 = t2_2.person) loser
ON winner.person = loser.person
WHERE loser.person IS NULL
答案 1 :(得分:0)
假设您的第一个表是table1而第二个表是table2,那么:
select
Person = case when isnull(t1.[last posted],'1900-01-01')>isnull(t2.[last posted],'1900-01-01') then t.person1 else t.person2 end
from
table1 t
left join table2 t1 on t.person1=t1.person
left join table2 t2 on t.person2=t2.person
(如果您知道自己没有找到过没有发布过的人,则可以省略使用isnull
并使用inner joins
)
答案 2 :(得分:0)
这个问题写得不好。我为选择具有最新日期的不同用户的步骤编写了一个解决方案,但结果与您编写的内容不同。不确定你的目标是什么样的逻辑。
加入第二个表(发布表两次),然后使用greatest
函数:
select distinct
case
when posts1.last_posted = greatest(posts1.last_posted,posts2.last_posted) then posts1.person
else posts2.person
end as latest_person
from games
left join posts as posts1 on games.person1 = posts1.person
left join posts as posts2 on games.person2 = posts2.person