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';