laravel SQL一般错误:4015窗口函数只能在SELECT列表和ORDER BY子句中使用

fhity93d  于 2023-01-06  发布在  其他
关注(0)|答案(2)|浏览(86)

我试图在Laravel中获取下一行和上一行ID,但它不允许我这样做,否则会出现以下错误:
数据库状态[HY000]:一般错误:4015窗口函数只允许在SELECT列表和ORDER BY子句中使用(SQL:SELECT订单ID,雇员ID,提前(订单ID,1)超过(按订单ID排序)下一个ID,滞后(订单ID,1)超过(按订单ID排序)上一个FROM订单组按订单ID,雇员ID,下一个ID,上一个)
这是我正在编写的代码

$order = DB::select(DB::raw(" 
    SELECT
        OrderID, 
        EmployeeID,
        LEAD(OrderID,1) OVER (
            ORDER BY OrderID
        ) nextID,
        lag(OrderID,1) OVER (
            ORDER BY OrderID
        ) previous
        
    FROM 
        orders

    group BY
        OrderID,
        EmployeeID,
        nextID,
        previous
    "))->orderby('OrderID', 'EmployeeID', 'nextID', 'previous')->get();
hxzsmxv2

hxzsmxv21#

试试看

$order = DB::table('orders')
    ->select(
        'OrderID', 
        'EmployeeID',
        DB::raw('LEAD(OrderID,1) OVER (ORDER BY OrderID) as nextID'),
        DB::raw('LAG(OrderID,1) OVER (ORDER BY OrderID) as previous')
    )
    ->groupBy('OrderID', 'EmployeeID', 'nextID', 'previous')
    ->orderBy('OrderID', 'EmployeeID', 'nextID', 'previous')
    ->get();
kq0g1dla

kq0g1dla2#

希望这能对一些人有所帮助。
SQL查询

select *, lead(start_loc,1) over(PARTITION BY dri_id order by start_time asc) as next_start_ride from `drivers` group by `dri_id`

Laravel查询生成器

$data = DB::table('drivers')->select(
            '*', 
            DB::raw('lead(start_loc,1) over(PARTITION BY dri_id order by start_time asc) as next_start_ride')
        )->get();

echo "<pre>";
print_r($data);

相关问题