我正在研究MySQL 5.7数据库,并且遇到了一些我最近做的有点大的查询时遇到了一些麻烦,我发现它有点深入特定部分未按预期运行。我做了一些测试,发现了一些奇怪的事情。尽管存在可用的值,MySQL MAX仍然返回null
的段是如下(号码已被硬编码为特定的方案,但通常从另一个表其的值):
SELECT
MAX(cp.dataAtualizacao) dataAtualizacao,
MAX(m.dataRegistro) dataRegistro,
CASE WHEN MAX(cp.dataAtualizacao) > MAX(COALESCE (m.dataRegistro, cp.dataAtualizacao)) THEN MAX(cp.dataAtualizacao) ELSE MAX(COALESCE (m.dataRegistro, cp.dataAtualizacao)) END data
FROM MadeiraNegocio cp
LEFT JOIN MadeiraConversaNegocio c ON (cp.id = c.idNegocioOriginal OR cp.id = c.idNegocioResposta)
LEFT JOIN MadeiraMensagemConversaNegocio m ON c.id = m.idConversa
WHERE cp.id = 959 AND ((cp.id = c.idNegocioOriginal AND 960 = c.idNegocioResposta) OR (960 = c.idNegocioOriginal AND cp.id = c.idNegocioResposta)) AND
(cp.id = 959 OR 960 = cp.idNegocioOriginal) AND (m.idAutor != 4370 OR m.idAutor IS NULL)
AS是,该查询返回[NULL,NULL,NULL ]。第二个空是例外,但不是第一个和第三个。 真正吓到我的是,事实上,如果我删除第一个属性上的MAX,dataAtualizacao正确返回,并非一个NULL值。
即使有要汇总的值,MAX如何返回null?我在这里错过了什么吗?
亲切的问候
编辑
MadeiraNegocio表:
id dataRegistro idNegocioOriginal cancelado dataAtualizacao dataVisualizacao
959 2017-08-18 11:28:58 null 0 2017-08-18 15:38:16 2017-08-18 16:00:23
MadeiraConversaNegocio表:
id idNegocioOriginal idNegocioResposta dataVisualizacaoOriginal dataVisualizacaoResposta
288 959 960 2017-08-18 14:54:10 2017-08-18 17:34:17
MadeiraMensagemConversaNegocio
id idConversa idAutor mensagem dataRegistro
229 288 4370 sometext 2017-08-18 16:25:02
当你用COUNT替换MAX时会发生什么? – kbball
它返回0,如果我用“SELECT *”替换整个select语句,它也不会返回任何条目。当我指定表和列时返回有效的时间戳时如何? –
我们可能必须查看其余的查询或数据才能回答这个问题吗?它没有真正意义上的说 – kbball