所以我尝试选择表中最近的 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/