MySQL,按组排序
我有一个表,其中包含一些值,以及根据另一个表的关联ID获取该值的时间 我希望检索该表中每个项目的最新值,然后按这些最新值排序 这是一把SQL小提琴 这里是文本输出 “历史”表MySQL,按组排序,mysql,sql,Mysql,Sql,我有一个表,其中包含一些值,以及根据另一个表的关联ID获取该值的时间 我希望检索该表中每个项目的最新值,然后按这些最新值排序 这是一把SQL小提琴 这里是文本输出 “历史”表 | HIST_ID | HIST_ITEM_ID | HIST_VALUE | HIST_TIME | |---------|--------------|------------|------------| | 1 | 1 | 1 | 1420291000 | |
| HIST_ID | HIST_ITEM_ID | HIST_VALUE | HIST_TIME |
|---------|--------------|------------|------------|
| 1 | 1 | 1 | 1420291000 |
| 2 | 1 | 2 | 1420292000 |
| 3 | 1 | 3 | 1420293000 |
| 4 | 1 | 5 | 1420294000 |
| 5 | 1 | 10 | 1420295000 |
| 6 | 1 | 50 | 1420296000 |
| 7 | 1 | 60 | 1420297000 |
| 8 | 1 | 77 | 1420298000 |
| 9 | 1 | 90 | 1420299000 |
| 10 | 1 | 101 | 1420300000 |
| 11 | 2 | 1 | 1420291000 |
| 12 | 2 | 3 | 1420292000 |
| 13 | 2 | 7 | 1420293000 |
| 14 | 2 | 9 | 1420294000 |
| 15 | 2 | 15 | 1420295000 |
| 16 | 2 | 21 | 1420296000 |
| 17 | 2 | 33 | 1420297000 |
| 18 | 2 | 35 | 1420298000 |
| 19 | 2 | 55 | 1420299000 |
| 20 | 2 | 91 | 1420300000 |
“项目”表
| ITEM_ID | ITEM_TITLE |
|---------|------------|
| 1 | ABCD |
| 2 | XYZ123 |
所以,我可以做一些像
select * from hist
inner join items on hist_item_id = item_id
group by hist_item_id
order by hist_value desc
但是,这会返回一个无法排序的分组。我怎样才能订购这个分组?我在这里查看了其他类似的问题,但无法将它们的解决方案成功地应用到我的查询中,以生成所需的结果
这里期望的结果是返回
HIST_ITEM_ID | ITEM_TITLE | HIST_VALUE |
|------------|------------|------------|
| 1 | ABCD | 101 |
| 2 | XYZ123 | 91 |
您可以使用联接来获取最近的历史记录项。然后,您可以连接回历史记录表和项目表以获取其他信息:
select h.*, i.item_title
from (select hist_item_id, max(hist_id) as max_hist_id
from hist
group by hist_item_id
) hh join
hist h
on h.hist_id = hh.max_hist_id join
items i
on i.item_id = hh.hist_item_id;
是一个SQL FIDLE。您应该使用MAX函数并按项目id分组。如下所示:
SELECT i.item_id, i.item_title, MAX(h.hist_value)
FROM items AS i
INNER JOIN hist AS h
ON i.item_id = h.hist_item_id
GROUP BY i.item_id