我在这方面遇到了很多麻烦。我试图在给定范围内获得每天的最大值。但当我加载查询结果时,我的计数列中始终出现空白值。
<?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
);
?>
最佳答案
这里有一些需要注意的事情。
首先,日期常量中的 %
符号不应该出现。这些仅适用于 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 编程来说不是一个好的选择;这是不安全的。
关于php - 获取给定日期范围的最大值并按天分组 PHP MYSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36954121/