我有一个表,其中包含一些值,以及针对另一个表中的关联ID获取该值的时间。
我希望检索该表中每个项目的最新值,然后按这些最新值排序。
下面是一个SQL fiddle,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 |发布于 2015-01-08 11:01:17
您可以使用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。
发布于 2015-01-08 11:16:42
您应该使用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_idhttps://stackoverflow.com/questions/27832215
复制相似问题