php - 如何在查询生成器 laravel 中执行此 SQL?
问题描述
如何在查询生成器 laravel 中执行此 SQL?
SELECT date_trunc('day', created_at) AS hour_stump,
(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-29 00:00:00'
GROUP BY 1, 2
ORDER BY 1, 2;
任何人都可以帮助我,因为我是 laravel 的新手。谢谢你。
解决方案
这是逐行等效的。
SQL | 建造者 |
---|---|
|
|
selectRaw
必须使用,而不是select
因为您的 select 语句具有函数和转换(date_trunc、extract、::int、count、max)。selectRaw
支持原始 sql 表达式。whereRaw
由于功能相同date()
。groupByRaw
必须使用,因为您没有按选定的列分组。orderByRaw
必须使用,因为您不是按选定的列排序。
这可以写得有点不同。
- 而不是
DB::query()->selectRaw(...->from('energydata_1001')
,你可以写DB::table('energydata_1001')->selectRaw(...
。我选择这样写是为了便于比较。生成的 SQL 不会改变。 - 而不是
whereRaw("date(created_at) <= ?", ['2020-11-30 23:59:59'])
你可以使用whereDate('created_at', '<=', '2020-11-30 23:59:59')
. 不同之处在于生成的 SQL。在使用 PostgreSQL 时whereDate
将列转换为日期而不是使用该函数。date()
whereRaw("date(created_at) >= ?", ['2020-11-30 23:59:59'])
转换为where/and date(created_at) >= '2020-11-30 23:59:59'
。whereDate('created_at', '>=', '2020-11-30 23:59:59')
where/and created_at::date >= '2020-11-30 23:59:59'
在 PostgreSQL 中转换为。
推荐阅读
- sql - SQL Server 从多个表中选择列名
- tensorflow - 如何使用 Keras 冻结某些层的权重?
- c++ - 在 C++ 中自动生成函数签名
- r - 如何在R中获取具有特殊条件的随机行
- httprequest - Springboot中未调用ClientHttpRequestInterceptor
- php - Symfony 4 / 学说插入初始数据库数据
- c - 这部分代码还有优化的空间吗?
- visual-studio-2017 - Nuget 输入不是有效的 Base-64 字符串,因为它包含非 base 64 字符,超过两个填充字符
- amazon-web-services - AWS API Gateway:API 密钥的最佳实践
- amazon-dynamodb - 是否可以使用 DynamoDB 存储后端横向扩展 Hashicorp Vault?