mysql - 如何选择mysql表中最近的N行,由于 "order clause"而出现错误

标签 mysql sql

所以我尝试选择表中最近的 N 行。但是我不断收到错误。我尝试使用网上发布的方法,但它不起作用,我不知道为什么。

这是我的代码:

SELECT * FROM (SELECT measurements.timestamp, 
airports.name,
CASE 
    WHEN measurements.unit = "F" THEN ROUND((measurements.temperature - 32) * 5/9,1)
    WHEN measurements.unit = "K" THEN ROUND(measurements.temperature - 273.15, 1)
ELSE measurements.temperature
END AS temperatureCelcius 
FROM measurements, airports
WHERE airports.code = measurements.airportCode
ORDER BY measurements.id DESC LIMIT 10) T ORDER BY 
T.id;

这是错误消息:

ERROR 1054 (42S22): Unknown column 'id' in 'order clause

最佳答案

您需要在子查询中选择它。我会把它写成:

SELECT *
FROM (SELECT m.timestamp, a.name, m.id,
             (CASE WHEN m.unit = 'F'
                   THEN ROUND((m.temperature - 32) * 5/9,1)
                   WHEN m.unit = 'K' 
                   THEN ROUND(m.temperature - 273.15, 1)
                   ELSE m.temperature
              END) AS temperatureCelcius 
      FROM measurements m JOIN
           airports a
           ON a.code = m.airportCode
      ORDER BY m.id DESC
      LIMIT 10
     ) T
ORDER BY T.id;

注释:

  • 表别名使查询更易于编写和阅读。
  • 字符串分隔符的 SQL 标准是单引号,而不是双引号。双引号也用于标识符,因此最好使用单引号。
  • 始终使用正确、明确、标准 JOIN 语法。 FROM 子句中没有逗号。
  • 缩进样式在单独的行上开始每个子句,并与查询的其余部分对齐。

关于mysql - 如何选择mysql表中最近的N行,由于 "order clause"而出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58583357/

相关文章:

mysql - 使用 MySQL 数据库触发器

php - 使用标签执行图像搜索

sql - 在两个条件上使用左连接的 Access-SQL 查询中缺少值

android - SQLite 中的重复条目

php - session 的sql注入(inject)

php - 从数据库中检索数据导致 0 个结果

java - Spring JPA 和 Hibernate 的 JPQL 查询错误

php - mysql命名约定

c# - 从两组日期范围 C# 中查找差距日期范围

sql - MVVM 和 Entity Framework - 什么引发事件?