如何设置SQL以查找从上周日到本周日的记录(1周)

时间:2013-07-28 21:02:39

标签: mysql sql date intervals

这与我现在的相似,是:

SELECT COUNT(author) FROM `posts` WHERE `date` >= DATE_SUB(CURDATE(), INTERVAL 1 WEEK) AND author='FooBar'

这将给我一个作者在过去一周内发布的次数。

如果我要在星期日下午5:30运行该计划以查找上周日中午12:00至本周日中午12:00的帖子,我想反而拥有它。同样地,如果我忘了在星期天运行它,现在是星期一。我仍然希望它从上周日中午12:00到上午12:00之间的星期日运行

编辑:

我已经完成了我需要使用PHP来形成正确的SQL语句,但我仍然很好奇如何在SQL中执行此操作。

<?php
    $dayofweek = strftime("%A",time());
    if($dayofweek == "Sunday") {
        $last_sunday = date('Y-m-d h:i:s',strtotime('Last Sunday'));
        $this_sunday = date('Y-m-d h:i:s',strtotime('Sunday'));
    } else {
        $last_sunday = date('Y-m-d h:i:s',strtotime('Last Sunday',strtotime('Last Sunday')));
        $this_sunday = date('Y-m-d h:i:s',strtotime('Last Sunday'));
    }
    print "last_sunday={$last_sunday}<br>";
    print "this_sunday={$this_sunday}<br>";
    print "SELECT COUNT(author) FROM `posts` WHERE `date` <= '$this_sunday' AND `date` >= '$last_sunday' AND author='FooBar'";
?>

1 个答案:

答案 0 :(得分:15)

要获得最新的前一个星期天午夜,这应该这样做。将NOW()的两个实例替换为您的日期时间,以检查另一个日期。

SELECT DATE_SUB(DATE(NOW()), INTERVAL DAYOFWEEK(NOW())-1 DAY) latest_sun

要提前一周获得星期日,请使用DAYOFWEEK(NOW())+6 DAY

编辑:那就是你的查询;

SELECT COUNT(author)
FROM `posts` 
WHERE author='FooBar'
  AND `date` >= DATE_SUB(DATE(NOW()), INTERVAL DAYOFWEEK(NOW())+6 DAY)
  AND `date` <  DATE_SUB(DATE(NOW()), INTERVAL DAYOFWEEK(NOW())-1 DAY)