2011-03-22 3 views
1

DB에 많은 데이터가 있습니다. 나는 MySQL을 사용하고있다. 데이터가 두 번 할 내가 보여표시를 위해 왼쪽 가입을 사용하십시오. 3 주 데이터가 잘못되었습니다.

line  count 
fa 01  0.0000 
fa 01  0.0000 
fa 02  0.0000 
fa 02  0.0000 
fa 03  0.0000 
fa 03  0.0260 

그것은 만드는 :로

SELECT Line, (SUM(S) + SUM(A) + SUM(B)*0.4 + SUM(C)*0.1)/COUNT(Serial_number) AS 3rd 
FROM inspection_report 
WHERE DAY(Inspection_datetime) BETWEEN 15 AND 21 
GROUP BY Line, WEEK(Inspection_datetime), YEAR(Inspection_datetime) 

하지만 결과 쇼 :이 경우에 대한

, 내가 어떤 쿼리를 사용하여 3 주간의 데이터를 표시하려고

SELECT id,A.Line,week3.3rd 
FROM inspection_report AS A 
LEFT JOIN(
    SELECT Line, (SUM(S) + SUM(A) + SUM(B)*0.4 + SUM(C)*0.1)/COUNT(Serial_number) AS 3rd 
    FROM inspection_report 
    WHERE DAY(Inspection_datetime) BETWEEN 15 AND 21 
    GROUP BY Line, WEEK(Inspection_datetime), YEAR(Inspection_datetime) 
    ) AS week3 USING (Line) 
WHERE MONTH(Inspection_datetime) = MONTH(CURRENT_DATE) 
AND YEAR(Inspection_datetime) = YEAR(CURRENT_DATE) 
GROUP BY Line 

하지만 같은 결과 쇼 :이 쿼리를 시도

,536,913,632 10
line     count 
fa 01    0.0000 
fa 02    0.0000 
fa 03    0.0000 //must be 0.0260 

어떻게 해결해야합니까? 고맙습니다

+0

첫 번째 시도에서 GROUP BY 주와 년을 삭제할 수 없습니까? (라인별로 그룹화). –

+0

첫 번째 쿼리에 연도를 출력 열로 추가하는 것으로 시작하므로보고있는 내용이 명확합니다. 이 경우에는 – Murph

답변

0

달의 15 일 일요일 (또는 구성에 따라 월요일) 일 경우 첫 번째 쿼리에서 Line 당 하나의 행을 얻을 것이라고 생각합니다. 그렇지 않으면, 15 일에서 21 일까지는 WEEK function에 따라 두 개의 다른 주에있을 것입니다. 그러나 나는 당신이 그 주까지 그룹으로 갈 필요가 없다고 생각합니다.

당신이하고 싶은 일이나 데이터가 어떻게 보이는지는 분명하지 않지만, 당신은 일년에 한 번씩 그룹화해야합니다.

WHERE MONTH(Inspection_datetime) = MONTH(CURRENT_DATE) 
AND YEAR(Inspection_datetime) = YEAR(CURRENT_DATE) 

을 한 후 모두 정상적으로 작동 할 수 있습니다

+0

, 매주 데이터를 계산하고 싶습니다. 나는'Line'에서 그룹화하려고 시도했지만, 일주일 내내 일주일 내내 데이터 수를 얻는다. 당월이 아닙니다. – klox

+0

@klox where 절에서 'DAY (Inspection_datetime) BETWEEN 15 AND 21'을 사용하면 일주일로 제한되지만 세 번째주의 정의와 'WEEK'함수의 n 번째주의 정의가 다르기 때문에 주어진 달의 15 일에서 21 일 사이에 두 개의 다른 값을 반환합니다. 현재 달만 원한다면 where 절에'MONTH (Inspection_datetime) = MONTH (CURRENT_DATE)'가 필요합니다. – jswolf19

+0

@ jswolf19 : 매주이 방법을 사용합니다. 예 : '첫 주 (1 ~ 7), 두 번째 주 (8-14), 세 번째 주 (15-21), 넷째 주 (22-28), 다섯째 주 (29-31)' – klox

0

그냥 쿼리에서이를 제거합니다.

관련 문제