【问题标题】:mysql select last 3 distinct rows but order by ascmysql 选择最后 3 个不同的行,但按 asc 排序
【发布时间】:2020-01-28 21:14:30
【问题描述】:

我正在尝试从表的最后 3 行中选择一个不同的列,然后按升序排列。

感谢任何帮助。

下面的代码给了我以下错误: “‘订单子句’中的未知列‘entry_id’”

SELECT * FROM (
    SELECT distinct(column) as sem FROM table ORDER BY entry_id DESC LIMIT 3
) sub
ORDER BY entry_id ASC

【问题讨论】:

  • 你运行的是哪个版本的 MySQL?
  • 注意 distinct 不是函数

标签: mysql sql-order-by distinct


【解决方案1】:

需要子查询返回排序列,否则在外层查询中不可用。

由于在子查询中使用了distinct,这变得很棘手。正如 Barmar 所说,将 entry_id 添加到 select distinct 子句可能会破坏 distinct,因此我们可以改为打开聚合:

SELECT column FROM (
    SELECT column, max(entry_id) max_entry_id as sem 
    FROM table 
    ORDER BY max_entry_id DESC LIMIT 3
) sub
ORDER BY max_entry_id 

注意:distinct 不是函数,所以它确实包含括号。

【讨论】:

  • 如果entry_id 是唯一ID,这可能会破坏distinct。应该是select column, max(entry_id) as entry_id ... group by column
  • @Barmar:是的,你是对的,我在推测如何解决这个问题......我认为聚合应该是正确的解决方案,正如你所建议的那样。答案已更新,谢谢。
  • 老鼠们,我想我的问题写错了!我需要的是最后三个不同的行。因此,如果一列包含月份,五行是 2 月,3 行是 3 月,2 行是 7 月...我需要按 asc 顺序返回每个月的最后一行,例如:Feb Mar Jul
猜你喜欢
  • 2012-02-12
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多