sql从上个月开始查询所有查询

del*_*468 0 mysql sql

我按照这个问题的第一个答案,但我的SQL查询有一些问题.我没有得到任何结果.
我犯了什么错误?
如何在每月的第一天始终设置CURDATE?

SELECT DATE_FORMAT(`date`, '%Y-%m-%d') , `price` 
FROM `sales` 
WHERE `id` = :id 
AND (`date` BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE())
Run Code Online (Sandbox Code Playgroud)

编辑整个代码:

$verkaufmonat3 = 0;
$verkaufmonatanzahl2 = 0;
$verkaufmonat4 = array();
$sqluser5 = $X['dbh']->prepare("SELECT DATE_FORMAT(`date`, '%Y-%m-%d') , `preis` FROM `verkauf` WHERE `vertreterid` = :id AND (`date` BETWEEN CURDATE(), '%Y-%m-01' - INTERVAL 60 DAY AND CURDATE(), '%Y-%m-01')");
$sqluser5->execute(array(
':id'=>$_SESSION['id']
));
$verkaufmonatanzahl2 = $sqluser5->rowCount();
$verkaufmonat4 = $sqluser5->fetchAll();
for ($a = 0; $a <= $verkaufmonatanzahl2; $a++) {
        $verkaufmonat3 += $verkaufmonat2[$a]['preis'];
}
Run Code Online (Sandbox Code Playgroud)

在我的数据库中,我在2016年10月28日进行了销售.价值50欧元.所以我的$ verkaufmonat3应该是50但不是,它是0.

Jua*_*eza 5

你的问题不明确,但要获得当月的第一天,你就可以使用了

 SELECT DATE_FORMAT(CURDATE() , '%Y-%m-1') 
Run Code Online (Sandbox Code Playgroud)

所以如果你想要上个月的数据试试

SELECT 
    DATE_FORMAT(CURDATE() , '%Y-%m-1') - INTERVAL 1 MONTH as first_day,
    DATE_FORMAT(CURDATE() , '%Y-%m-1') - INTERVAL 1 DAY as last_day
Run Code Online (Sandbox Code Playgroud)

含义

 WHERE `date` BETWEEN  DATE_FORMAT(CURDATE() , '%Y-%m-1') - INTERVAL 1 MONTH
                  AND  DATE_FORMAT(CURDATE() , '%Y-%m-1') - INTERVAL 1 DAY
Run Code Online (Sandbox Code Playgroud)