MYSQL SELECT最近的id和ORDER BY

时间:2016-01-11 11:59:45

标签: mysql

我要做的是获取每个resort_id然后ORDER BY snow_depth的最新结果。我管理的前两部分。订购是不起作用的部分。

到目前为止我有什么

SELECT * FROM snow_conditions t1

NATURAL JOIN ( SELECT MAX(weather_id) AS weather_id, resort_id FROM snow_conditions 
GROUP BY resort_id ) t2 

ORDER BY snow_depth DESC

weather_id自动递增,因此我使用它而不是save_time来减少计算资源。

令我困惑的是结果出现在snow_depth的一些奇怪的偏序中。

+-----------+------------+------------+
| resort_id | weather_id | snow_depth |
+-----------+------------+------------+
|       888 |    827     |       90   |
|       943 |    835     |       90   |
|       860 |    839     |       75   |
|       17  |    828     |       71   |
|       26  |    826     |       70   |
|       9   |    852     |       60   |           
|       16  |    831     |       292  |
|       296 |    862     |       170  |
|       20  |    843     |       168  |
|       5   |    842     |       165  |
|       36  |    838     |       160  |
|       17  |    17      |       0    |
|       26  |    26      |       0    |
+-----------+------------+------------+

什么时候真的应该像这样

+-----------+------------+------------+
| resort_id | weather_id | snow_depth |
+-----------+------------+------------+
|       16  |    831     |       292  |
|       296 |    862     |       170  |
|       20  |    843     |       168  |
|       5   |    842     |       165  |
|       36  |    838     |       160  |
|       888 |    827     |       90   |
|       943 |    835     |       90   |
|       860 |    839     |       75   |
|       17  |    828     |       71   |
|       26  |    826     |       70   |
|       9   |    852     |       60   |           
|       17  |    17      |       0    |
|       26  |    26      |       0    |
+-----------+------------+------------+

我已经尝试了几乎所有相关的MySQL查询,但我们都遇到了相同的问题或者无法正常工作。

编辑:我应该提到这个表包含数千行,每行resort_id有数百行。它以这种方式完成,所以我可以用它来产生降雪历史。

2 个答案:

答案 0 :(得分:2)

我认为您应该检查数据库中snow_depth的数据类型,它不应该是varchar。您的结果听起来像varchar,如果是,则将其更改为int或任何numeric类型

答案 1 :(得分:2)

您的结果已按snow_depth排序,但snow_depth列是varchar数据类型。改变它,或者你可以使用它:

cast(snow_depth as unsigned) DESC

所以,你的所有查询应该是:

SELECT * FROM snow_conditions t1

NATURAL JOIN ( SELECT MAX(weather_id) AS weather_id, resort_id FROM snow_conditions 
GROUP BY resort_id ) t2 

ORDER BY cast(snow_depth as unsigned) DESC