我正在尝试选择user_from
中存在的行user_to
作为后来创建的其他行中的SELECT A
FROM db.table A
LEFT JOIN db.table B
ON A.user_to = B.user_from
AND A.user_from = B.user_to
AND A.createdAt < B.createdAt
WHERE B.user_to IS NOT NULL AND B.user_from IS NOT NULL;
。
此查询为我提供了行。
user_to/user_from
但是,我想获得user_to = 1, user_from = 2
user_to = 2, user_from = 1
user_to = 2, user_from = 1
user_to = 1, user_from = 2
的每个组合的第一行。
E.g。如果有一些行如:
createdAt
我想获得第一个创建的(定义为GROUP BY user_from
)。
我已尝试使用user_from
,但这会排除每个CreatedTime
的所有其他组合。
答案 0 :(得分:0)
我似乎早些时候误解了这个要求。
假设没有两个&#39; createdAt&#39;值完全相同,你可以使用:
select a.* from
A a
where NOT EXISTS (SELECT *
FROM A b
WHERE (
(
(a.to_ = b.from_ AND a.from_ = b.to_)
OR
(a.to_ = b.to_ AND a.from_ = b.from_ AND a.c <> b.c)
)
AND
b.c < a.c
)
);
答案 1 :(得分:0)
我认为在DISTINCT
查询中使用SELECT
。
SELECT DISTINCT A
FROM db.table A
LEFT JOIN db.table B
ON A.user_to = B.user_from
AND A.user_from = B.user_to
AND A.createdAt < B.createdAt
WHERE B.user_to IS NOT NULL AND B.user_from IS NOT NULL;