Laravel - 选择首次出现列值

时间:2018-05-05 10:33:03

标签: php mysql sql laravel eloquent

我有与此

类似的数据库表urls
id | user_id | name
----------------------------
1  | 56      | John
2  | 25      | Carry
3  | 56      | Jim
4  | 12      | Jolana
5  | 12      | Ava 

我需要做的是选择user_id在DESC中排序id的{​​strong>第一次出现的行。在这种情况下,它意味着选择ID为532的行。

这可以通过Eloquent,或者如果不是纯粹的SQL以某种方式实现吗?我可以想象为此编写一个脚本,但我想让它与一个查询一起工作。

2 个答案:

答案 0 :(得分:1)

使用SQL很容易:

select t.*
from t
where t.id = (select min(t2.id) from t t2 where t2.user_id = t.user_id);

答案 1 :(得分:0)

您可以使用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