MySql查询无法使用max子句

时间:2014-10-01 09:45:39

标签: php mysql laravel query-builder

我想知道为什么这个查询不起作用。这是查询构建器语句:

$this->getBuilder()
    ->select('code', 'name', 'date')
    ->groupBy('name', 'code')
    ->having('MAX(date)')
    ->get()

导致此错误:

SQLSTATE[HY000]: General error: 1 near "?": syntax error (SQL: select "code", "name", "date" from "rival_rates" group by "name", "code" having "MAX(date)"  ) (Illuminate\Database\QueryException)

我不知道问号在哪里,没有任何参数。

如果我通过mysql命令行运行sql查询,它可以工作:

mysql> select code, name, date from rival_rates group by name, code having MAX(date);
+------+------+------------+
| code | name | date       |
+------+------+------------+
| 100  | tal  | 2014-10-01 |
| 100  | tal2 | 2014-10-05 |
| 200  | tal2 | 2014-10-03 |
+------+------+------------+
3 rows in set (0.00 sec)

mysql>

如果我删除了'部分它的工作。这有什么问题?

提前谢谢。

3 个答案:

答案 0 :(得分:2)

您需要havingRaw

$this->getBuilder()
    ->select('code', 'name', 'date')
    ->groupBy('name', 'code')
    ->havingRaw('MAX(date)')
    ->get()

答案 1 :(得分:0)

语法中存在问题。

$this->getBuilder()
     ->select('code', 'name', 'date')
     ->groupBy('name', 'code')
     ->having('MAX(date)')
     ->get()

这里,having子句需要3个参数,如->having('MAX(date)', '>=', '2014-09-25')

注意:第一个参数用于列名,第二个用于比较运算符,第三个用于比较值。

答案 2 :(得分:0)

$condition = 'MAX(date)';

$this->getBuilder()
    ->select('code', 'name', 'date')
    ->groupBy('name', 'code')
    ->having($condition)
    ->get()

这也有效。如果你不想给参数赋予条款。