在 MySQL 5.7
,我有以下几点 orders
以及 transactions
各表。我想得到最大值 transaction.timestamp
每种产品 orders.status
是“完成”。
我使用了以下查询:
SELECT
MAX(timestamp),
product,
idorder,
idtransaction,
order_name
FROM
transaction left join orders
ON
transaction.order_id=orders.idorder
WHERE
status='done'
GROUP BY
'product';
但它导致了如下错误:
错误代码:1055。select list的表达式#2不在group by子句中,它包含未聚合的列“openbankŠu approvedb.transaction.product”,该列在功能上不依赖于group by子句中的列;这与sql\u mode=only\u full\u group by不兼容
我理解这里的问题,sql是无法理解的 GROUP BY
因为有多个类别。如何编写它,以便它返回与每个产品的最大时间戳记录相关的详细信息?
3条答案
按热度按时间qq24tv8q1#
我想你想要:
笔记:
据推测,所有事务的顺序都是有效的,因此不需要外部联接。
限定所有列名,以便查询明确无误。
不要在列名周围加单引号。仅对字符串和日期常量使用单引号。
这不包括交易和订单的ID。这样的id对于返回产品信息的查询没有意义。
编辑:
我突然想到,你想完整的交易信息,为最近的交易,为每个产品是“完成”。如果是这样,我将使用一个相关子查询:
quhf5bfb2#
您可以通过一个简单的技巧使用相同的查询。在MySQL5.7的默认sql模式下,您可以使用任何\u值来绕过该错误。
查看文档以详细了解为什么这里需要任何\u值https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_any-价值观。
jdzmm42g3#