Mysql GROUPBY语句上的非相关值

Mysql GROUPBY语句上的非相关值,mysql,Mysql,帮助我使用下一个SQL: SELECT date_format(from_unixtime(`ticket_logs`.`created`),'%Y-%m-%d') AS `datac`, `ticket_logs`.`ticket_id` AS `ticket_id`, ticket_logs.value_old, ticket_logs.value_new, max(`ticket_logs`.`action`) AS `ultima_act` FR

帮助我使用下一个SQL:

SELECT
    date_format(from_unixtime(`ticket_logs`.`created`),'%Y-%m-%d') AS `datac`,
    `ticket_logs`.`ticket_id` AS `ticket_id`,
    ticket_logs.value_old,
    ticket_logs.value_new,
    max(`ticket_logs`.`action`) AS `ultima_act`

FROM
    `ticket_logs`
WHERE
    (
        (`ticket_logs`.`action` = 6)
        OR (`ticket_logs`.`action` = 16)
    )
GROUP BY
    date_format(
        from_unixtime(`ticket_logs`.`created`),
        '%Y-%m-%d'
    ),
    `ticket_logs`.`ticket_id`
ORDER BY
    `datac` DESC,
    `ticket_logs`.`ticket_id` DESC

问题是“旧值”和“新值”总是取每个日期的第一个值,而不是与“操作”的最大值对应的值。我不认为这是一个问题。这就是SQL的工作原理——
orderby
发生在
groupby
之后。此外,MySQL让您感到困惑,因为您使用的是一个扩展名
groupby
,您并不完全理解它——在
select
中有额外的列,而这些列不在
groupby
中。(见附件。)

幸运的是,MySQL支持黑客获取您想要的内容,而无需编写更复杂的SQL语句。您需要的表达式是:

substring_index(group_concat(ticket_logs.value_old order by `ticket_logs`.`action` desc), ',', 1)
substring_index(group_concat(ticket_logs.value_new order by `ticket_logs`.`action` desc), ',', 1)

找到了另一种方法。我使用“已创建”列获得最大值并加入:

SELECT
    date_format(
        from_unixtime(`ticket_logs`.`created`),
        '%Y-%m-%d'
    ) AS `datax`,
    ticket_logs.ticket_id,
    ticket_logs.action,
    ticket_logs.value_old,
    ticket_logs.value_new
FROM
    ticket_logs
INNER JOIN (
    SELECT
        date_format(
            from_unixtime(`ticket_logs`.`created`),
            '%Y-%m-%d'
        ) AS `datac`,
        max(ticket_logs.created) AS maxts,
        ticket_id
    FROM
        ticket_logs
    WHERE
        ticket_logs.action = 6
    OR ticket_logs.action = 16
    GROUP BY
        date_format(
            from_unixtime(`ticket_logs`.`created`),
            '%Y-%m-%d'
        ),
        ticket_id
) maxtbl ON ticket_logs.ticket_id = maxtbl.ticket_id
AND ticket_logs.created = maxtbl.maxts
ORDER BY
    datax DESC,
    ticket_id DESC

是的,谢谢!我发现了一些内部连接示例,但似乎不适合我的问题。我来测试你的解决方案。祝你一切顺利
MAX(created)
与问题中指定的“最大行动价值”不同。是的,我知道这不是我最初问题的答案。这是另一种在一天结束时发现价值的方法。它在我的环境中起作用。