将 SQL 转换为 Laravel 查询生成器错误 - 需要专家级别

问题描述

我用 Postgresql 编写的 sql 查询

SELECT date_trunc('day',created_at) AS hour_stamp,(extract(hour FROM created_at)::int / 60) AS min_slot,count(*),max(e4) as kwh
FROM energydata_1001
WHERE api_key_value= 'YaB8JCcE'
AND date(created_at) >= '2020-11-30 23:59:59'
AND date(created_at) <= '2020-12-16 00:00:00'
GROUP  BY 1,2
ORDER  BY 1,2;

我已经在 Laravel Query Builder 中编写了这个查询

$rnd = DB::table('energydata_1001')
            -> select (DB::raw("date_trunc('day',created_at) AS hour_stamp",'(extract(hour FROM created_at)::int / 60) AS min_slot'),DB::raw('count(*)'),DB::raw('max(e4) as kwh'))
            ->where ('api_key_value','=','YaB8JCcE')
            ->where ('created_at','>=','2020-11-30 23:59:59')
            ->where ('created_at','<=','2020-12-29 00:00:00')
            ->groupBy('1','2')
            ->orderByRaw('1','2')
            ->get();

但是我在运行此代码时收到了这样的错误

my error image in laravel

当我在我的 Postgresql 中运行此查询时,它可以工作并显示数据。

解决方法

试试这个:

$rnd = DB::table('energydata_1001')->select(DB::raw('DATE_TRUNC(\'day\',created_at) AS hour_stamp'));

/* select statements */
$rnd = $rnd->addSelect(DB::raw('(EXTRACT(hour FROM created_at)::int / 60) AS min_slot'));
$rnd = $rnd->addSelect(DB::raw('COUNT(*)'));
$rnd = $rnd->addSelect(DB::raw('MAX(e4) AS kwh'));

/* where clause */
$rnd = $rnd->where('api_key_value','YaB8JCcE');
$rnd = $rnd->where('created_at','>=','2020-11-30 23:59:59');
$rnd = $rnd->where('created_at','<=','2020-12-29 00:00:00');

$rnd = $rnd->groupBy(1,2);
$rnd = $rnd->orderBy(1);
$rnd = $rnd->orderBy(2);
$rnd = $rnd->get();

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...