Php 选择设置日期00:01和23:59之间的最大值-SQL

Php 选择设置日期00:01和23:59之间的最大值-SQL,php,mysql,sql,Php,Mysql,Sql,我的codeigniter应用程序中有以下功能 function set_day_peak($days, $offset, $network_id){ $days = $days + $offset; $query = $this->db->query("SELECT MAX(total_online)AS total FROM network_traffic WHERE network_id = '$network_id' AND timestamp &g

我的codeigniter应用程序中有以下功能

function set_day_peak($days, $offset, $network_id){

    $days = $days + $offset;
    $query = $this->db->query("SELECT MAX(total_online)AS total FROM network_traffic
    WHERE network_id = '$network_id' AND timestamp >= NOW() - INTERVAL $days DAY 
    AND timestamp <= NOW() - INTERVAL $offset DAY");
    $data = $query->row();

    return $data->total;

}   
用于返回第1天00:01到23:59之间的最大值(在线总单位),偏移量为7天或(8天前)


由于我对sql不太在行,所以我能管理的唯一解决方案是使用php设置时间戳,即
($day\u start和$day\u end)
,然后使用
之间选择MAX,但我想看看是否可以用纯sql完成。任何想法都将不胜感激。

我想你想放弃时间部分,因此,您可以使用日期函数来删除时间

$query = $this->db->query("SELECT MAX(total_online)AS total FROM network_traffic
WHERE network_id = '$network_id' AND timestamp >= date(NOW() - INTERVAL $days DAY) 
AND timestamp <= date(NOW() - INTERVAL $offset DAY)");
$query=$this->db->query(“选择MAX(在线总计)作为网络流量总计
其中network_id='$network_id'和timestamp>=date(NOW()-INTERVAL$days-DAY)

时间戳我想你应该删除时间部分,所以你可以使用日期函数来删除时间

$query = $this->db->query("SELECT MAX(total_online)AS total FROM network_traffic
WHERE network_id = '$network_id' AND timestamp >= date(NOW() - INTERVAL $days DAY) 
AND timestamp <= date(NOW() - INTERVAL $offset DAY)");
$query=$this->db->query(“选择MAX(在线总计)作为网络流量总计
其中network_id='$network_id'和timestamp>=date(NOW()-INTERVAL$days-DAY)
和时间戳
由于
timestamp
上的函数调用,优化器很难在
timestamp
上使用索引,因此这可能没有优化器那么有效。您应该进行实验


由于
timestamp
上的函数调用,优化器很难在
timestamp
上使用索引,因此这可能没有那么有效。您应该进行实验。

感谢您的回答,但它仍然没有返回准确的数据,我需要它返回max(total_online)在设定日期的00:01和23:59之间。再次感谢,但它仍然返回不准确的数据,即我从8天得到的结果与我从7天得到的结果相同。我认为我的代码和您发布的代码都在一天的当前时间之间进行检查,而不是在00:01和23:59之间。您是否有机会向我提供一个确切的详细示例,您希望看到的日期等证明答案?我的答案为您提供2012-11-03 00:00到2012-11-04 00:00(这些值设置为天峰值(1,7,14))。要将2012-11-03 00:00到2012-11-03 23:59,您只需与我之前的答案相同,如
timestamp
$days
为1时,这一点恰好有效;当
$days
的值大于1时,它会产生错误的结果。不过,核心思想是正确的。感谢您的回答,但它仍然没有返回准确的数据,我需要它返回max(total_online)在设定日期的00:01和23:59之间。再次感谢,但它仍然返回不准确的数据,即我从8天得到的结果与我从7天得到的结果相同。我认为我的代码和您发布的代码都在一天的当前时间之间进行检查,而不是在00:01和23:59之间。您是否有机会向我提供一个确切的详细示例,您希望看到的日期等证明答案?我的答案为您提供2012-11-03 00:00到2012-11-04 00:00(这些值设置为天峰值(1,7,14))。要将2012-11-03 00:00到2012-11-03 23:59,您只需与我之前的答案相同,如
timestamp
$days
为1时,这一点巧合地起作用;当
$days
的值大于1时,它会产生错误的结果。尽管如此,核心思想是正确的。为什么事件不在感兴趣的一天的第一分钟和最后几分钟?什么是“第1天有7天偏移”?你是说第0天=星期天,第1天=星期一,…;那么你呢你想要7天或更长时间前的星期一的数据吗?第一分钟和最后一分钟很重要,我的错误。第一天有7天的偏移量意味着8天之前,第六天有7天的偏移量意味着13天之前。为什么事件不在当天的第一分钟和最后一分钟?什么是“第一天有7天的偏移量”?你的意思是第0天=星期天,第1天=星期一。。。;那么你想要7天或更长时间前的星期一的数据吗?第一分钟和最后一分钟很重要,我的错误。第一天有7天的偏移意味着8天之前,第六天有7天的偏移意味着13天之前
function set_day_peak($days, $offset, $network_id){

    $days = $days + $offset;
    $next = $days - 1;
    $query = $this->db->query("
       SELECT MAX(total_online) AS total
         FROM network_traffic
        WHERE network_id = '$network_id'
          AND timestamp >= DATE(NOW() - INTERVAL $days DAY) 
          AND timestamp <  DATE(NOW() - INTERVAL $next DAY)");
    $data = $query->row();

    return $data->total;
}
function set_day_peak($days, $offset, $network_id){

    $days = $days + $offset;
    $query = $this->db->query("
       SELECT MAX(total_online) AS total
         FROM network_traffic
        WHERE network_id = '$network_id'
          AND DATE(timestamp) = DATE(NOW() - INTERVAL $days DAY)");
    $data = $query->row();

    return $data->total;
}