2015-01-08 3 views
1

다른 테이블에서 연결된 ID에 대해 값을 가져온 시간과 함께 일부 값이있는 테이블이 있습니다.MySQL, 주문 GROUP BY

해당 테이블의 모든 항목에 대한 최신 값을 검색 한 다음 해당 최신 값으로 정렬하려고합니다. 여기

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

'항목'테이블

| 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

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 바이올린입니다.

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