MySQL日期计算

时间:2012-04-18 15:26:41

标签: mysql datetime

我已经用尽了我的搜索,正在寻找这个MySQL日期计算的解决方案。我的客户想知道在过去的一周,一个月和一年中完成了多少笔交易。

这是一个基于SQL的脚本(但在MySQL语言中)我很忙,所以不要打扰Select,From等。 datetime_created字段(在脚本中)已经在UnixTime中,而时间戳(现在)用于计算当前日期减去7天。 由于公式结果也可能是负数,我只需要0.01到7之间的结果。

我上周的公式如下所示。有什么想法吗?

(registrations.datetime_created -unix_timestamp(now())-604800)/86400

4 个答案:

答案 0 :(得分:1)

如何使用UNIX_TIMESTAMP / ADDDATE()/?

编辑略微扩展以澄清

SELECT
    COUNT(*)
FROM registrations
WHERE registrations.datetime_created
    -- will go back to now() - a month INCLUDING time.  -1 WEEK/MONTH/YEAR etc all works here
    BETWEEN UNIX_TIMESTAMP(ADDDATE(NOW(),INTERVAL -1 WEEK)) 
    AND UNIX_TIMESTAMP(NOW())                                   
    -- will start at now() including time

通过在WHERE标准中指定开始和结束时间戳,MySQL能够在datetime_created字段(如果存在)上使用索引来非常有效地执行此操作。相反,如果在WHERE中有WHERE registrations.datetime_created*1235/12515(字段上的操作),那么您将看到它返回较慢,因为MySQL需要扫描整个表以确定要返回的行。

答案 1 :(得分:1)

这未经过测试,但我认为它会做你想做的事情:

SELECT
    q1.dealsInLastWeek,
    q2.dealsInLastMonth,
    q3.dealsInLastYear
FROM
    (SELECT COUNT(*) AS dealsInLastWeek FROM registrations WHERE FROM_UNIXTIME(datetime_created) > DATE_ADD(NOW(), INTERVAL -1 WEEK)) q1,
    (SELECT COUNT(*) AS dealsInLastMonth FROM registrations WHERE FROM_UNIXTIME(datetime_created) > DATE_ADD(NOW(), INTERVAL -1 MONTH)) q2,
    (SELECT COUNT(*) AS dealsInLastYear FROM registrations WHERE FROM_UNIXTIME(datetime_created) > DATE_ADD(NOW(), INTERVAL -1 YEAR)) q3

答案 2 :(得分:0)

使用INTERVAL进行测试

SELECT (unix_timestamp(now()-INTERVAL '7' DAY)),(unix_timestamp(now()-INTERVAL '1' MONTH)),(unix_timestamp(now()-INTERVAL '1' YEAR));

WHERE registrations.datetime_created>(unix_timestamp(now()-INTERVAL '7' DAY)) 

答案 3 :(得分:0)

Where子句根本没有被接受,我不得不改变一些逻辑。谢谢所有,但最终的剧本是每个人的混合物,如下:

registrations.datetime_created > UNIX_TIMESTAMP(ADDDATE(NOW(),INTERVAL -1 WEEK))