part_id가있는 마지막 두 배치에 대한 각 part_id의 평균 시간과 모든 배치에 대한 각 part_id의 평균 시간을 계산하려고합니다 .개별 그룹 세트에 속한 마지막 x 레코드의 평균 계산
발견 된 마지막 2 배치에 대한 part_id의 평균을 분리 할 수 있었지만 각 부품 ID에 대한 계산을 수행 할 수 있도록 코드에 통합 할 수 없습니다. 알 수없는 열 'tst.part_id'에서 'where 절'에 오류가 발생했습니다.이 중첩 된 선택 쿼리에 해당 tst.part_id 값을 전달해야합니다.
part_id AVG on last 2 batches Average Time Overall
1 27.25 25.67
2 22.5 22.5
3 16.67 16.67
4 47.5 47.5
테이블 스키마 :
여기SELECT tst.part_id,
AVG(tst.est_time) AS 'Average Time Overall',
(SELECT AVG(ft.avgLastMax)
FROM
(SELECT t2.avglst as 'avgLastMax', t2.numval as 'numval'
FROM (SELECT
@num:=CASE WHEN @last != tst3.batch_id
THEN @num:=(@num + 1)
ELSE @num:[email protected] END 'numval',
@last:=tst3.batch_id,
@name:=CASE WHEN @num > 2
THEN @name:[email protected]
ELSE @name:=(tst3.est_time) END 'avglst'
FROM test AS tst3,
(select @last:=0, @avg := 0, @name :=0 , @num :=0) var
/* GET AVERAGE FOR A SINGLE PART ID
WHERE tst3.part_id = 1 */
WHERE tst3.part_id = tst.part_id
ORDER BY tst3.run_id DESC) as t2
)
as ft
WHERE ft.numval <3) as 'AVG on last 2 batches'
FROM test AS tst
GROUP BY tst.part_id;
내가 얻으려고 노력하고있는 무슨이다 :
http://sqlfiddle.com/#!9/77bea5/85
쿼리 내가 사용 : 아래
내가 가진 바이올린입니다 :CREATE TABLE test
(`part_id` int, `est_time` int, `batch_id` int, `run_id` int, `line` varchar(1))
;
INSERT INTO test
(`part_id`, `est_time`, `batch_id`, `run_id`, `line`)
VALUES
(1, 20, 1, 1, 'T'),
(1, 25, 1, 2, 'T'),
(2, 30, 1, 3, 'T'),
(3, 15, 1, 4, 'T'),
(1, 10, 2, 5, 'X'),
(4, 40, 2, 8, 'X'),
(2, 15, 3, 9, 'T'),
(3, 15, 3, 10, 'T'),
(3, 20, 3, 11, 'T'),
(1, 34, 4, 12, 'X'),
(1, 32, 4, 13, 'X'),
(1, 33, 4, 14, 'X'),
(4, 55, 5, 15, 'T')
;
EDITED : 마지막 batch_id를 가져 오기 위해 tst3.run_id DESC에 의해 표와 순서가 수정되었습니다. 변수
숫자 귀하의 예상 출력에서 합산하지 않는 것 같습니다. 예를 들어,'part_id' 1은 가장 최근의 두 개의 배치에 대해 평균이 32.5입니다. –
실수로 순서를 거꾸로했는데 part_id 1의 경우 27.25가되어야합니다. ((33 + 32 + 34 + 10)/4) – barracuda
(part_id, batch_id, run_id)은 고유/기본 항목입니다. 맞습니까? – Strawberry