cette requête fonctionne mais tire tous les résultats. Je voudrais qu'il tire seulement des résultats qui ne sont pas 0,00 qui est le total. Ceci est calculé dans la requête mais je ne sais pas comment exclure les résultats avec 0.00?MYSQL sélectionner info de la somme dans la requête
SELECT name,
SUM(IF(timeperiod='0',totalinv-paidtotal,0)) AS p0030,
SUM(IF(timeperiod='30',totalinv-paidtotal,0)) AS p3060,
SUM(IF(timeperiod='60',totalinv-paidtotal,0)) AS p6090,
SUM(IF(timeperiod='90',totalinv-paidtotal,0)) AS p9000,
SUM(totalinv)-SUM(paidtotal) AS totaldue
FROM
(
SELECT primary_key, name, timeperiod, totalinv, SUM(paidtotal) as paidtotal
FROM
(
SELECT
a.primary_key,
a_name AS name,
CAST(totalinv AS DECIMAL(10,2)) as totalinv,
CAST(IFNULL(amount,0) AS DECIMAL(10,2)) as paidtotal,
CASE
WHEN invoicedate > DATE_SUB(STR_TO_DATE($today,'%Y%m%d'),INTERVAL 29 DAY) THEN '0'
WHEN invoicedate > DATE_SUB(STR_TO_DATE($today,'%Y%m%d'),INTERVAL 59 DAY) AND invoicedate <= DATE_SUB(STR_TO_DATE($today,'%Y%m%d'),INTERVAL 29 DAY) THEN '30'
WHEN invoicedate > DATE_SUB(STR_TO_DATE($today,'%Y%m%d'),INTERVAL 89 DAY) AND invoicedate <= DATE_SUB(STR_TO_DATE($today,'%Y%m%d'),INTERVAL 29 DAY) THEN '60'
ELSE '90'
END AS timeperiod
FROM $mysql_billing a
LEFT OUTER JOIN $mysql_billing_dates b ON a.primary_key = b.id
WHERE $today >= invoicedate
AND $totaldue!='0.00'
AND void=''
) foo
GROUP BY primary_key, name, timeperiod
) bar
GROUP BY name
ORDER BY name ASC
En quoi consiste le '$ totaldue'? Est-ce une variable PHP de l'extérieur de cette chaîne? Quelle colonne (dans le tableau!) Est liée à totaldue? À l'heure actuelle, tant que cette variable externe est non nulle, tous les enregistrements seront retournés et si cette variable externe est nulle, aucun enregistrement ne sera retourné. –
Incidemment, je suis sûr que tout cela peut être fait sans une seule sous-requête. Apprenez à utiliser 'JOIN 'plutôt que sous-requête - c'est beaucoup plus efficace en termes de performances et de lecture. –
Comment pouvez-vous sélectionner totalinv sans fonction agrégée et groupe par tout sauf cela? Quelle valeur peut-elle donner ?! Je suis assez sûr qu'il doit être SELECT clé primaire, nom, timeperiod, SUM (totalinv), ... ' –