MySQL,排序 GROUP BY

标签 mysql sql

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

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

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

这里是文本输出。

'历史'表

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

最佳答案

您可以使用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 fiddle 。

关于MySQL,排序 GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27832215/

相关文章:

在 Ubuntu 上使用 SSL 的 MySQL ODBC 连接

sql - JdbcTemplate动态表名和SQL注入(inject)

c++ - C-Free 和 MySQL 连接

php - Mysql错误 'w'中的未知列 'field list'

SQL 日期之间的计算

php - 如何对数据库查询中的所有对话(消息)进行分组

mysql - mysql中的独占读锁

mysql - 查询列中添加值并将其插入到mysql中的另一个表中

php - 分页变量和其他变量在php中有冲突

php - MYSQL关注者系统: Indexing the Followers Table