我有以下原始查询:
select *
from (select * from settings order by priority desc) x
group by name
我想使用laravel 5查询构建器,但不能使子查询工作。有没有办法在不使用原始查询的情况下执行此操作?
表格:
id - name - priority
1 1 1
2 1 2
3 2 1
在上面的例子中,它会像我想要的那样返回第2行和第3行
我尝试了这个查询:
$settings = \App\Setting::where('user_id', Auth::id())->orWhere('tool_id', $id)->groupBy('name')->orderBy('priority', 'desc')->get();
但这将返回第1行和第3行。
答案 0 :(得分:1)
你能使用CTE表达吗? RANK()会起作用:
WITH CTE AS
(
SELECT *, RANK() OVER(PARTITION BY name ORDER BY priority desc) AS RowRank
FROM settings
)
SELECT id, name, priority
FROM CTE c
WHERE c.RowRank = 1