MySQL,订购GROUP BY

时间:2015-01-08 02:55:54

标签: mysql sql

我有一个表中包含一些值,以及对另一个表中的关联ID采用值的时间。

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

这是一个SQL小提琴,http://www.sqlfiddle.com/#!2/0be99

这是文本输出。

'hist'表

| 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 |

'items'表

| 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 |

2 个答案:

答案 0 :(得分:0)

您可以使用join获取最新的历史记录项。然后,您可以加入历史表和项目表以获取更多信息:

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;

Here是一个SQL小提琴。

答案 1 :(得分:0)

您应该使用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