Использовать левое соединение для показа данных за 3-ю неделю неверный результат - PullRequest
1 голос
/ 22 марта 2011

У меня много данных в моей БД. Я использую Mysql.

для этого случая я пытаюсь показать данные за 3-ю неделю, используя некоторый запрос:

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)

но результат показывается как:

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

но результат показывается как:

line                  count
fa 01                0.0000
fa 02                0.0000
fa 03                0.0000    //must be 0.0260

как мне решить эту проблему? благодарственное в

Ответы [ 2 ]

0 голосов
/ 11 апреля 2011

Просто удалите это из запроса:

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

и тогда все может работать нормально.

0 голосов
/ 22 марта 2011

Я думаю, вы получите только одну строку на Line в первом запросе, если 15-е число месяца будет воскресным (или понедельником, в зависимости от вашей конфигурации). В противном случае, с 15 по 21 будет в две разные недели в соответствии с функцией WEEK . Однако я не думаю, что вам нужно группировать по неделям.

Хотя не совсем понятно, что вы хотите делать или как выглядят ваши данные, я думаю, что вы должны сгруппироваться по годам и, возможно, месяцам.

...