为每个组合选择第一行

时间:2017-07-27 10:49:07

标签: mysql

我正在尝试选择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的所有其他组合。

2 个答案:

答案 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;