Я пытаюсь запросить несколько таблиц. И мне нужно иметь подзапрос с BETWEEN в качестве оператора. Запрос работает нормально, так как я не использую «before» или «in» или «> =» и т. Д.
Я думаю, что проблема в том, что Spark SQL не может агрегировать, если у вас нет оператора равенства (=).
Если я уберу этот запрос «И c1.month МЕЖДУ ...», то также будет работать, если я также напишу И c1.month МЕЖДУ 1 И 3 (например)
Заранее спасибо за любую помощь
Вот код:
SELECT (cr.volume /
(SELECT SUM(hours)
FROM TempsuCalendar c1
WHERE YEAR(cr.deliveryfromdate) = c1.year AND
c1.month BETWEEN MONTH(cr.deliveryfromdate) AND
MONTH(cr.deliverytodate) AND
c1.region = cr.NewRegion AND
c1.loadtype = 'B'
)
) as AVERAGEPOWER,
T.MODIFIEDBY,
T.MODIFICATIONDATE
FROM TempenmTransactionmapping tm JOIN --DWH.EnmTransactionMapping TM
TempsuTransactionmapping sm --DWH.SuTransactionMapping SM
ON tm.id_sutransactionmapping = sm.id JOIN
TempsuTransaction t --DWH.SuTransaction T
ON sm.id_transaction = t.id_transaction JOIN
TempsuCalculationrow cr --DWH.SuCalculationRow CR
ON t.id_calculationrow = cr.id_calculationr
Сообщение об ошибке:
Error in SQL statement: AnalysisException: Correlated column is not allowed in a non-equality predicate:
Aggregate [sum(cast(hours#15695 as bigint)) AS sum(hours)#17948L]
+- Filter (((year(cast(outer(deliveryfromdate#15543) as date)) = year#15690) && ((month#15691 >= month(cast(outer(deliveryfromdate#15543) as date))) && (month#15691 <= month(cast(outer(deliverytodate#15544) as date))))) && ((region#15687 = outer(NewRegion#15829)) && (loadtype#15689 = B)))
+- SubqueryAlias `c1`
+- SubqueryAlias `tempsucalendar`
+- Relation[REGION#15687,CALENDARDATE#15688,LOADTYPE#15689,YEAR#15690,MONTH#15691,WEEK#15692,DAYINMONTH#15693,WEEKDAY#15694,HOURS#15695,HOLIDAY#15696,HistoryDate#15697,ProcessingDate#15698,RankNo#15699] csv
;;
Distinct
+- Union... AND MORE