【问题标题】:MySQL sort ordered grouped dataMySQL排序有序分组数据
【发布时间】:2019-01-07 07:55:53
【问题描述】:

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

SELECT * FROM (
    SELECT * FROM ticketRules
    ORDER BY
        date DESC,
        time DESC
) AS myTicketRules
GROUP BY ticketId
ORDER BY ticketId ASC

第一个Order By(子查询中的那个)按日期和时间对数据进行排序,因此最后一个ticketrule 始终是第一个。 我将结果按ticketId 分组,所以我只得到了每张票的最后一个ticketRule。 现在我想按票对结果进行排序,但如果这样做,第一个结果也会受到影响,票不再有最后一个票规则,而是 ID 最低的票,因为它是按票号排序的。

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

【问题讨论】:

标签: mysql sql datetime subquery sql-order-by


【解决方案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

【讨论】:

  • 感谢您的回答。我的表的问题是我使用 2 个单独的表来表示日期和时间(出于设计目的),所以 MAX() 函数对我不起作用。任何想法如何解决这个问题?
【解决方案2】:

你不应该在没有聚合函数的情况下使用 group by,并且为了获得最后一个值可以使用聚合函数作为 max( )

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-28
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多