SELECT IF ( SUM( t.debit )>= SUM( t.credit ), SUM( t.debit ) - SUM( t.credit ), SUM( t.credit ) - SUM( t.debit )) AS Balance, IF(SUM( t.debit )>= SUM( t.credit ) ,"Profit", "Loss") AS status FROM transactions AS t WHERE t.userId = 1 AND t.dateIssued BETWEEN '2021-07-09' AND '2021-07-10';Esperaba dar 6000 como salida porque el intervalo debería incluir la fecha.
dateIssued no es una Date , es un DateTime / timestamp .
Entonces, cuando compara su valor 2021-07-10 13:11:12 con fechas como '2021-07-09' y '2021-07-10' la comparación se interpreta como:
'2021-07-10 13:11:12' BETWEEN '2021-07-09 00:00:00' AND '2021-07-10 00:00:00' que devuelve false .
Convierta dateIssued to Date con la función Date() y luego compare:
WHERE t.userId = 1 AND DATE(t.dateIssued) BETWEEN '2021-07-09' AND '2021-07-10'; Para un mejor rendimiento, debería considerar escribir las condiciones sin BETWEEN y la función Date() :
WHERE t.userId = 1 AND t.dateIssued >= '2021-07-09' AND t.dateIssued < '2021-07-11';