MySQL:时间戳上具有最大功能的不期望结果

时间:2017-01-12 12:14:16

标签: mysql group-by max aggregate-functions mantis

我使用Mantis Bug数据库(使用MySQL),我想查询哪些错误在过去两周内的严重程度发生了变化,但是只应指出错误的最后严重性更改。

问题是,每个bugID(这是主键)我得到多个条目,这不是我想要的结果,因为我想每个bug只有最新的更改。这意味着我不知何故错误地使用了max函数和group by子句。

在这里你可以看到我的查询:

SELECT `bug_id`,
    max(date_format(from_unixtime(`mantis_bug_history_table`.`date_modified`),'%Y-%m-%d %h:%i:%s')) AS `Severity_changed`,
    `mantis_bug_history_table`.`old_value`,
    `mantis_bug_history_table`.`new_value`
    from `prepared_bug_list` 
    join `mantis_bug_history_table` on `prepared_bug_list`.`bug_id` = `mantis_bug_history_table`.`bug_id` 
    where (`mantis_bug_history_table`.`field_name` like 'severity') 
    group by `bug_id`,`old_value`,`.`new_value`
    having (`Severity_modified` >= (now() - interval 2 week))
    order by bug_id` ASC

对于id为8的错误,我得到了三个带有此查询的条目。 id 8的错误确实在过去两周内发生了三次严重性更改,但我只想获得最新的严重性更改。

我的查询有什么问题?

2 个答案:

答案 0 :(得分:1)

TableLayoutPanel是一个聚合函数,它似乎不适合您要执行的操作。

我觉得你要做的是从max()中获取最新的所有适用的bug_id。如果这是真的,那么我会将查询重写为以下内容 - 我会编写一个子查询mantis_bug_history_table并将其与getLatest

连接起来

更新回答

警告:我无法访问实际的数据库表,因此此查询可能存在错误

prepared_bug_list

答案 1 :(得分:1)

我终于有了解决方案!我的朋友帮助了我,解决方案的一部分是包含mantis bug历史表的主键,它不是bug_id,而是列id,它是一个连续的数字。 解决方案的另一部分是where子句中的子查询:

    select `prepared_bug_list`.`bug_id` AS `bug_id`,
`mantis_bug_history_table`.`old_value` AS `old_value`,
`mantis_bug_history_table`.`new_value` AS `new_value`,
`mantis_bug_history_table`.`type` AS `type`,
date_format(from_unixtime(`mantis_bug_history_table`.`date_modified`),'%Y-%m-%d %H:%i:%s') AS `date_modified`
 FROM `prepared_bug_list`
 JOIN mantis_import.mantis_bug_history_table
 ON `prepared_bug_list`.`bug_id` = mantis_bug_history_table.bug_id
 where (mantis_bug_history_table.id = -- id = that is the id of every history entry, not confuse with bug_id
    (select `mantis_bug_history_table`.`id` from `mantis_bug_history_table` 
     where ((`mantis_bug_history_table`.`field_name` = 'severity') 
     and (`mantis_bug_history_table`.`bug_id` = `prepared_bug_list`.`bug_id`))
    order by `mantis_bug_history_table`.`date_modified` desc limit 1)
and `date_modified` > unix_timestamp() - 14*24*3600 ) 
order by `prepared_bug_list`.`bug_id`,`mantis_bug_history_table`.`date_modified` desc