代码之家  ›  专栏  ›  技术社区  ›  Jakub Szymsza

Laravel-选择列值第一次出现的行

  •  0
  • Jakub Szymsza  · 技术社区  · 6 年前

    我有DB表 urls 与此类似

    id | user_id | name
    ----------------------------
    1  | 56      | John
    2  | 25      | Carry
    3  | 56      | Jim
    4  | 12      | Jolana
    5  | 12      | Ava 
    

    我需要做的是用 第一次发生 属于 user_id 按说明订购 id 。在这种情况下,这意味着选择具有ID的行 5 ,则, 3 2

    这可以通过使用雄辩的(如果不是的话)纯SQL以某种方式实现吗?我可以想象为此编写一个脚本,但我想让它与一个查询一起工作。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Gordon Linoff    6 年前

    使用SQL很容易做到这一点:

    select t.*
    from t
    where t.id = (select min(t2.id) from t t2 where t2.user_id = t.user_id);
    
        2
  •  0
  •   Lukasz Szozda    6 年前

    你可以使用 ROW_NUMBER :

    SELECT *
    FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY id DESC) AS rn
          FROM tab_name) sub
    WHERE rn = 1
    ORDER BY id DESC;
    

    DBFiddle Demo - MariaDB 10.2

    DBFiddle Demo - MySQL 8.0