mysql在()和dateadd中的日期之间的区别

时间:2016-11-18 08:46:25

标签: mysql sql

我有一个相当简单的查询,它可以在大型数据集上运行。

当我使用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

所有帮助表示赞赏

0 个答案:

没有答案