MySQL排序有序的分组数据

时间:2019-01-07 07:55:54

标签: mysql sorting subquery grouping

我有两个表:ticket和ticketRules,我有这样的查询:

query = {
  join: [:comments],
  where: {:author => 'Bob', comments: {author: 'Joe'}}
}
#=> "SELECT  `articles`.* FROM `articles` INNER JOIN `comments` ON `comments`.`article_id` = `articles`.`id` WHERE `articles`.`author` = 'Bob' AND `comments`.`author` = 'Joe'"

第一个SELECT * FROM ( SELECT * FROM ticketRules ORDER BY date DESC, time DESC ) AS myTicketRules GROUP BY ticketId ORDER BY ticketId ASC (子查询中的那个)按日期和时间对数据进行排序,因此最后一个票证规则始终是第一个。 我将结果按Order By进行分组,因此我仅获得每个票证的最后一个ticketRule。 现在,我想按票证对结果进行排序,但是如果这样做,第一个结果也会受到影响,并且票证不再具有最后的票证规则,而是ID最低的票证规则,因为它是按票证ID排序的。

在对可见记录进行分组后,如何仅对可见记录进行排序?

2 个答案:

答案 0 :(得分:1)

您的查询有几个问题:

  • 应该只有一个ORDER BY子句(应该放在外部查询中)
  • GROUP BY没有按照您的想法做(即,它无法访问最后一张票)

如果您尝试提取按ticketId排序的每个ticketId的完整最新记录,则可以如下使用相关子查询:

SELECT 
    t.*
FROM
    ticketrule t
WHERE
    t.date = (
        SELECT MAX(date)
        FROM ticketrule
        WHERE ticketId = t.ticketId 
    )
ORDER BY t.ticketId

答案 1 :(得分:0)

您不应在没有聚合函数的情况下使用分组依据,并且要获取最后一个值,可以将聚合函数用作max( )

select  ticketId, max(date)
from ticketRules 
grouo by ticketId