获取给定日期范围的最大值并按天PHP MYSQL分组

时间:2016-04-30 11:11:00

标签: php mysql

我遇到这么多麻烦。我试图在给定范围的情况下获得每天的最大值。但是当我加载查询结果时,我的计数列中仍然会出现空白值。

<?php

include("dbconnect.php");   

$link=Connection();


$data1 = '2016-04-29 00:00:00';
$data2 = '2016-05-02 00:00:00';



$result = mysql_query(
                          "
                          SELECT DATE(orderDate), MAX(Count)
                          FROM testLocation 
                          WHERE orderDate 
                          BETWEEN '$data1%' AND '$data2%'
                          GROUP BY DATE(orderDate)
                          "
                          ,$link
                          );
?>

2 个答案:

答案 0 :(得分:0)

我建议您使用PDO进行上述查询。您的问题并不完全清楚,但如果您打算检索其值最大的数据库结果,您可以采取以下方式。

$sql='SELECT * FROM testLocation 
                      WHERE orderDate 
                      BETWEEN '$data1%' AND '$data2%' ORDER BY orderDate
                      DESC LIMIT 1';

通过此查询,我们将检索到的数据限制为1,这就是为什么您只获得此处的最大值并标记我们已按降序排序数据。

答案 1 :(得分:0)

这里要看几件事。

首先,日期常量中的%符号不应该存在。这些仅适用于LIKE运算符。

其次,BETWEEN运算符对DATETIME值的效果不佳,因为它等价于:

     WHERE orderDate >= '$data1'
       AND orderDate <= '$data2'  -- wrong!

在截止日期正好午夜之后,这将排除所有内容。 <=是用于DATETIME的错误比较。

你应该改用:

     WHERE orderDate >= '$data1'
       AND orderDate <  '$data2' + INTERVAL 1 DAY

它包括在结束日期之后的<午夜之前的所有内容。这意味着它将包含您日期范围的最后一天的所有内容,这可能是您想要的。

第三,我建议您为结果集中的列指定别名列名。这将使PHP代码更容易检索。

               SELECT DATE(orderDate) orderDate, 
                      MAX(Count) maxCount
                FROM testLocation 
               WHERE orderDate >= '$data1'
                 AND orderDate <  '$data2' + INTERVAL 1 DAY
               GROUP BY DATE(orderDate)

第四,如果您的testLocation表在特定日期根本没有记录,则此查询的结果集将省略该日期。

第五(其他人在评论中提到这一点)mysql_ API不是你的PHP编程的好选择;这是不安全的。