我要做的是获取每个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
有数百行。它以这种方式完成,所以我可以用它来产生降雪历史。
答案 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