Php Laravel-选择列值首次出现的行

Php Laravel-选择列值首次出现的行,php,mysql,sql,laravel,eloquent,Php,Mysql,Sql,Laravel,Eloquent,我有类似的DB表URL id | user_id | name ---------------------------- 1 | 56 | John 2 | 25 | Carry 3 | 56 | Jim 4 | 12 | Jolana 5 | 12 | Ava 我需要做的是选择在DESC by id中排序的user_id首次出现的行。在这种情况下,这意味着选择id为5、3和2的行 这可以通过使用雄辩的(如果不是的话)纯SQL以某种

我有类似的DB表URL

id | user_id | name
----------------------------
1  | 56      | John
2  | 25      | Carry
3  | 56      | Jim
4  | 12      | Jolana
5  | 12      | Ava 
我需要做的是选择在DESC by id中排序的user_id首次出现的行。在这种情况下,这意味着选择id为5、3和2的行


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

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

select t.*
from t
where t.id = (select min(t2.id) from t t2 where t2.user_id = t.user_id);
您可以使用行号:


在我的数据库上,MySQL和MariaDB中的分区附近总是出现语法错误server@JakubSzymsza可能您使用的是过时的版本。我使用的是MariaDB 10.0.34,但由于某些原因,它仍然不起作用。但不管怎样,戈登的解决方案是有效的。谢谢。@JakubSzymsza行号是在MariaDB 10.2.0>10.0.34中引入的。我不太理解这个查询,请您调整它以适合我的示例和表名URL好吗?@JakubSzymsza给您。我想你需要的是MAX而不是MIN。你试过什么?你有没有一个模型,或者你想进入我个人不会赞同的领域,比如下面的两个答案。如果您有一个名为Url的模型,大致上,您可以调用以下Url:all->orderByDesc'id'->groupBy'user\u id'。但请注意这一点。
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;