MySQL,按组排序

MySQL,按组排序,mysql,sql,Mysql,Sql,我有一个表,其中包含一些值,以及根据另一个表的关联ID获取该值的时间 我希望检索该表中每个项目的最新值,然后按这些最新值排序 这是一把SQL小提琴 这里是文本输出 “历史”表 | HIST_ID | HIST_ITEM_ID | HIST_VALUE | HIST_TIME | |---------|--------------|------------|------------| | 1 | 1 | 1 | 1420291000 | |

我有一个表,其中包含一些值,以及根据另一个表的关联ID获取该值的时间

我希望检索该表中每个项目的最新值,然后按这些最新值排序

这是一把SQL小提琴

这里是文本输出

“历史”表

| 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