Laravel SQL一般错误:4015窗口函数仅在选择列表中允许和按子句订购

发布于 2025-02-07 03:12:54 字数 707 浏览 1 评论 0原文

我正在尝试在Laravel中获取下一行和上一行ID,但它不会让我这样做而不会得到此错误:

sqlstate [hy000]:常规错误:仅允许窗口功能4015 在选择列表和订单中,按子句(SQL:SELECT ORDERID,雇员, LEAD(OrderId,1)Over(OrderID)NextID,滞后(Orderid,1) (订购订单)从订单组中订购的先前 员工,隔壁,以前)

这是正在处理的代码

$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();

I'm trying to get the next row and previous row id in Laravel but it wont let me do it without getting this error:

SQLSTATE[HY000]: General error: 4015 Window function is allowed only
in SELECT list and ORDER BY clause (SQL: 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 )

This is the code am working on

$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();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

孤独岁月 2025-02-14 03:12:54

尝试

$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();

Try

$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();
十级心震 2025-02-14 03:12:54

希望这会帮助某人。

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);

Hope this is will help someone.

SQL Query

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 Query Builder

$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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文