Во-первых, давайте начнем с понимания того, что вы хотите .. Вы хотите итогов в неделю. Это означает, что будет предложение «GROUP BY» (также для любых агрегатов MIN (), MAX (), AVG (), SUM (), COUNT () и т. Д.). Что является основой группы BY. В этом сценарии вы хотите в неделю. Приводит к следующей части, которую вы хотите для определенного диапазона дат, соответствующего вашей таблице календаря.
Я бы начал с того, КАКИЕ критерии фильтрации в первую очередь. Кроме того, ВСЕГДА ПЫТАЙТЕСЬ идентифицировать все таблицы (или псевдонимы) .column в ваших запросах, чтобы любой после вас знал, откуда поступают столбцы, особенно когда используется несколько таблиц. В этом случае "ct" является алиасом для "Calendar_Table"
SELECT
ct.dt
from
calendar_table ct
where
ct.dt >= '2018-07-01'
AND ct.dt <= '2018-10-01'
Теперь вышеприведенная дата выглядит ВКЛЮЧЕННОЙ к 1 октября, и похоже, что вы пытаетесь сгенерировать квартальную сумму с июля, августа, сентября. Я бы изменил на МЕНЬШЕ, чем 1 октября.
Теперь у вашего календаря много дней, и вы хотите, чтобы он был сгруппирован по неделям, поэтому функция WEEK () получает вам эту отдельную ссылку без явной проверки каждой даты. Кроме того, старайтесь НЕ использовать зарезервированные ключевые слова в качестве окончательных имен столбцов ... это иногда приводит к путанице.
Я назвал имя столбца как "WeekBasis". Здесь я сделал COUNT (*), чтобы показать общее количество дней и группу, показав это в контексте.
SELECT
WEEK( ct.dt ) WeekBasis,
MIN( ct.dt ) as FirstDayOfThisWeek,
MAX( ct.dt ) as LastDayOfThisWeek,
COUNT(*) as DaysInThisWeek
from
calendar_table ct
where
ct.dt >= '2018-07-01'
AND ct.dt <= '2018-10-01'
group by
WEEK( ct.dt )
Итак, на данный момент у нас есть 1 запись в неделю в течение периода, который вас интересует,
но я также взял самые ранние и последние даты, чтобы показать и другие компоненты.
Теперь давайте вернемся к вашим дополнительным таблицам. Мы знаем даты, о которых идет речь, теперь нужно
получить подробности из других таблиц (чего не хватает в сообщении. Вы должны опубликовать
критические компоненты, такие как, как таблицы связаны через общие / объединенные столбцы.
Как tracker_part_archive связан с tracker_weld_archive ??
Чтобы упростить ваш запрос, вам даже не нужна таблица календаря в качестве сварки
таблица имеет поле даты, и вы знаете свой диапазон. Просто запросите против этого напрямую.
ЕСЛИ идентификатор вашего работника числовой, не добавляйте кавычки вокруг него, просто оставьте число.
SELECT
WEEK( twa.Weld_DateAndTime ) WeekBasis,
COUNT(*) WeldingEntriesDone,
SUM(tpa.weight) TotalWeight
from
tracker_weld_archive twa
JOIN tracker_parts_archive tpa
-- GUESSING on therelationship here.
-- may also be on a given date too???
-- all pieces welded by a person on a given date
ON twa.weld_worker = tpa.weld_worker
AND twa.Weld_DateAndTime = tpa.Weld_DateAndTime
where
twa.Weld_Worker = 133
AND twa.Weld_DateAndTime >= '2018-07-01'
AND twa.Weld_DateAndTime <= '2018-10-01'
group by
WEEK( twa.Weld_DateAndTime )
ЕСЛИ вы предоставляете структуры таблиц И примеры данных, это может быть уточнено для вас немного.