我有两个表: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排序的。
在对可见记录进行分组后,如何仅对可见记录进行排序?
答案 0 :(得分:1)
您的查询有几个问题:
如果您尝试提取按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