MYSQL - mit zwischen gibt leeres Ergebnis
Folgenden ist die Abfrage, die ich versuche zu laufen.
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
Hinzufügen mit zwischen beginnt Rücksendung von leeren Ergebnissen.während wenn ich den Vergleich wurde es mit hart kodierten Werten, es gibt Ergebnisse (wieder, ohne zwischen). zu halten, verallgemeinert kann ich nicht benutzen hart kodierte Werte und es funktioniert nicht mit, auch wenn ich es hart codierte Werte.
UPDATE: Mit funktioniert nicht mit zwischen, weil es schon wählt ein ResultSet mit einem Bereich wo das max ist weniger als das Ergebnis von COUNT(). Jedoch gibt es immer mindestens einen Bereich mit max größer als das Ergebnis von COUNT().
- haben Sie versucht, mit 'ZWISCHEN' Bedingung Ihrer 'WHERE' - Klausel.?
- aggregierte Funktion nicht in der where-Klausel, daher die Notwendigkeit der having-Klausel
- versuchen Sie es so :
HAVING COUNT(vfp.UnitsPass) BETWEEN MIN(ta.minbenchmark) AND MAX(ta.maxbenchmark)
- Ich machte es Arbeit. auch wenn Ihr Kommentar nicht lösen, wird die Abfrage sofort, aber es hat mich drängen, mich in die richtige Richtung. was ich Tat, falsch war, nicht die Gruppierung der Ergebnismenge durch den ta.minbenchmark und ta.maxbenchmark. daher wäre es nur, um die Ergebnisse für die ersten min-max-paar Geldstrafen technisch machen die having-Klausel unwirksam.
Du musst angemeldet sein, um einen Kommentar abzugeben.
was ich falsch machte war nicht die Gruppierung der Ergebnismenge durch den ta.minbenchmark und ta.maxbenchmark. daher wäre es nur, um die Ergebnisse für die ersten min-max-paar findet es technisch machen die having-Klausel unwirksam. Also die richtige Abfrage würde wie folgt Aussehen (für alle, machen die gleichen Fehler):
;