Ниже приведен запрос, который я пытаюсь запустить.MYSQL- Имея с возвращением пустой результат
SELECT p_date,TS.substationid,ts.substationcode,ts.manufacturingproductid,ts.assemblylineid,ts.teamid,ts.subofficecode,
TA.AllowID,ta.allowname,ta.minbenchmark,ta.maxbenchmark,COUNT(vfp.UnitsPass) Achieved,
CASE TA.RewardType
WHEN 'Monthly' THEN
TA.RewardValue/DAY(LAST_DAY(P_Date))
WHEN 'Yearly' THEN
TA.RewardValue/((STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM P_Date),1,1),'%Y%m%d')) /(STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM P_Date),12,31), '%Y%m%d')))
WHEN 'Daily' THEN
(TA.RewardValue*12)/365
END-- , 0)
AS Allowance
FROM tempsubstation ts
LEFT JOIN TempAllowances ta ON ts.manufacturingproductid=ta.manufacturingproductid AND ts.subofficecode=ta.subofficecode
LEFT JOIN wms_vfproduction vfp ON DATE(vfp.CreationDate)=p_date AND vfp.StationCode='1600150'
WHERE ta.AllowID=41 AND vfp.UnitsPass=1
GROUP BY p_date,substationcode
HAVING COUNT(vfp.UnitsPass) BETWEEN ta.minbenchmark AND ta.maxbenchmark
Добавление имея с между начинается возвращение пустой results.while, когда я сравнивал его с твердыми закодированных значений возвращает результаты (опять же, без между ними). чтобы он был обобщен, я не могу использовать жестко закодированные значения, и он не работает, даже если я даю ему жестко закодированные значения.
UPDATE: Не работает между ними, потому что он уже выбирает набор результатов с диапазоном, где max меньше результата COUNT(). Однако всегда существует по крайней мере один диапазон с максимальным значением, превышающим результат COUNT().
Вы пытались использовать условие «МЕЖДУ» в предложении «ГДЕ».? – Jhanvi
агрегированная функция не будет работать в условии where, поэтому необходимость иметь предложение – Salik
попробует вот так: 'HAVING COUNT (vfp.UnitsPass) BETWEEN MIN (ta.minbenchmark) И MAX (ta.maxbenchmark)' – Stephan