2013-03-20 2 views
-1

아래의 쿼리는 horse_id = 1에 대한 결과를 생성하는 데 완벽합니다. 그러나 데이터베이스의 모든 말에 대해이 작업을 수행하려고합니다. 누구든지 나와 함께이 쿼리를 조정할 수 있도록 할 수 있습니까?모든 행을 포함하도록 MySQL 하위 쿼리/조인을 확장하는 방법

SELECT figures.entry_id, 
     max(figures.beyer) 
FROM 
     (SELECT hrdb_lines.horse_id, 
        hrdb_entries.entry_id, 
        hrdb_lines.beyer 
      FROM hrdb_entries 
      INNER JOIN hrdb_lines 
       ON hrdb_lines.horse_id = hrdb_entries.horse_id 
      WHERE hrdb_lines.horse_id = 1 
      ORDER BY hrdb_lines.line_date DESC 
      LIMIT 2 
     ) as figures 

아마도 내가 잘못하고 있습니다. 나는 당신의 질문을 이해 해요 경우

+0

차 'hrdb_lines.horse_id = 1'을'GROUP BY hrdb_lines.horse_id'로 설정하면됩니다. – hjpotter92

+0

이 결과가 변경되었지만 두 가지로 제한되는 쿼리가 가장 최근의 두 결과를 가져 오는 데 사용됩니다. "group by"을 수행하면 무작위로 entry_id와 max (figures.beyer)가 나온다. – TravisVOX

답변

0

, 이런 일이 가까이 있어야 : 그냥 가장 최근의 2 개 베이어 필드를 MAX를 제한 할

SELECT 
    figures.horse_id, 
    figures.entry_id, 
    max(figures.beyer) 
FROM 
    (SELECT 
     hrdb_lines.horse_id, 
     hrdb_entries.entry_id, 
     hrdb_lines.beyer 
    FROM hrdb_entries 
     INNER JOIN hrdb_lines ON hrdb_lines.horse_id = hrdb_entries.horse_id 
    ORDER BY hrdb_lines.line_date DESC 
    ) as figures 
GROUP BY figures.horse_id 

하나의 옵션 것은 결과에 행 번호를 추가하는 것입니다 행만 1 내가 생각 2.

SELECT 
    figures.horse_id, 
    figures.entry_id, 
    max(figures.beyer) 
FROM 
    (SELECT 
     @rn:=if(@prev_horse_id=horse_id,@rn+1,1) rn, 
     hrdb_lines.horse_id, 
     hrdb_entries.entry_id, 
     hrdb_lines.beyer, 
     @prev_horse_id:=hrdb_lines.horse_id 
    FROM hrdb_entries 
     INNER JOIN hrdb_lines ON hrdb_lines.horse_id = hrdb_entries.horse_id 
     INNER JOIN (SELECT @rn:=0) r 
    ORDER BY hrdb_lines.horse_id, hrdb_lines.line_date DESC 
    ) as figures 
WHERE rn <= 2 
GROUP BY figures.horse_id 
+0

이것은 확실히 가까운 것입니다. 나는 분명히해야하지만 "한계"는 근본적으로 두 개의 가장 최근 라인에서 상위 바이어를 붙잡는 것입니다. 이 쿼리는 데이터베이스의 모든 라인에 대해 최대 값을 제공합니다. – TravisVOX

+0

@TravisVOX - 위의 수정 사항을 참조하십시오. 찾고있는 결과를 생성해야하는 행 번호 변수를 도입했습니다 (이해한다면 다시). 희망이 도움이됩니다. – sgeddes

+0

나는 당신의 제안을 구현했다. 그러나 여전히 필드가 제한되어있는 두 줄의 "최대"수를 제한하지 않는다? 'WHERE rn <= 2'을 변경하면 결과도 변경되지 않습니다 (0으로 설정 한 경우는 예외). – TravisVOX

0

을 포함하여 원하는 결과를 생성 할 다음

SELECT `entry_id`, `beyer` 
FROM (SELECT hrdb_entries.entry_id, 
     MAX(hrdb_lines.beyer) 
    FROM hrdb_entries 
    INNER JOIN hrdb_lines 
     ON hrdb_lines.horse_id = hrdb_entries.horse_id 
    GROUP BY hrdb_lines.horse_id 
    ORDER BY hrdb_lines.line_date DESC 
    ) AS figures 
관련 문제