我有一个相当简单的查询,它可以在大型数据集上运行。
当我使用IN运算符时,我得到一个我认为正确的结果 当我使用DATE_ADD()时,我得到一个我认为不正确的结果。
查询如下:( 2条评论行是2个选项)
SELECT
e.date, er.ratio, e.total as recalc
FROM
equity e
JOIN
exchange_rate er ON e.date = er.date
AND LOWER(er.currency) = LOWER(e.currency)
join account a
on e.account = a.id
WHERE
-- e.date >= DATE_ADD(DATE(NOW()), INTERVAL - 5 DAY)
-- e.date in ('2016-11-14','2016-11-15','2016-11-16')
and a.lynx_country = 'BE'
IN后括号中的值是我执行
时返回的值SELECT
distinct date
FROM
equity e
WHERE
e.date >= DATE_ADD(DATE(NOW()), INTERVAL - 5 DAY)
此外,对于2个查询,结果集是相同的,但是当我添加包装器查询时,我得到了显着的差异
完整查询,包括包装器:
select ROUND(SUM(total) / ratio, 2) as agg, date
from (
SELECT
e.date, er.ratio, e.total
FROM
equity e
JOIN
exchange_rate er ON e.date = er.date
AND LOWER(er.currency) = LOWER(e.currency)
join account a
on e.account = a.id
WHERE
e.date >= DATE_ADD(DATE(NOW()), INTERVAL - 5 DAY)
-- e.date in ('2016-11-14','2016-11-15','2016-11-16')
and a.lynx_country = 'BE'
) dummy
group by date
错误的结果:DATE_ADD(DATE(NOW()),INTERVAL - 5 DAY)
agg | date
------------------------
68833599.13 | 2016-11-14
69350727.47 | 2016-11-15
69351461.28 | 2016-11-16
正确的结果:在(' 2016-11-14',' 2016-11-15',' 2016-11-16')
agg | date
-------------------------
101956327.03 | 2016-11-14
102722297.52 | 2016-11-15
102723384.45 | 2016-11-16
所有帮助表示赞赏