我有一个表中包含一些值,以及对另一个表中的关联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 |
答案 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