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.
InformationsquelleAutor Salik | 2013-09-18
Schreibe einen Kommentar