Начните с удаления всех ненужных частей и упрощения.Пример:
SELECT
md.*
FROM
monthdata md
WHERE
md.monthval = #01/09/2018#
)
as md_20180901
ON d.UID = md_20180901.dataUID
AND md_20180901.monthval = #01/09/2018#
можно упростить:
(SELECT val FROM monthdata WHERE monthval=#01/09/2018#) md_20180901
ON d.UID=md_20180901.dataUID
Вам не нужно повторять имена таблиц, если нет конфликта имен полей.Вам не нужно назначать псевдонимы, которые никогда не будут использоваться (на самом деле я обычно назначаю псевдонимы только в том случае, если я использую одну и ту же таблицу дважды).Вам не нужно добавлять monthval
при фильтрации на ON
, поскольку вы уже делаете это в WHERE
.Единственное поле, которое вы на самом деле собираете, это val
(monthval
фактически является фиксированным значением, поскольку вы фильтруете по определенной дате), поэтому не используйте *
.
Очистите запрос и попробуйтедобавив по одному monthval
за раз, посмотрим, что получится.