我有与此
类似的数据库表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为5
,3
和2
的行。
这可以通过Eloquent,或者如果不是纯粹的SQL以某种方式实现吗?我可以想象为此编写一个脚本,但我想让它与一个查询一起工作。
答案 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 强>