为表上的每个组选择最后一个时间戳(记录)

时间:2019-05-21 03:01:43

标签: php mysql

我已经在Stack Overflow中通过了一些问题,但是经过一些测试后,无法解决我的问题。 我有一个如下表。

  ID           log_device_id           device_timestamp
=========================================================
  1456              0056              2019-05-19 11:45:18
  1451              0061              2019-05-19 22:00:03
  1450              0035              2019-05-19 17:16:23
  1449              0011              2019-05-19 12:31:34
  1448              0124              2019-05-18 09:11:27

我正在使用下面的代码来获取设备ID列表和时间戳;

sql ='SELECT log_device_id,max(device_timestamp) FROM devicetable group by log_device_id';
    $result = mysqli_query($conection, $sql);
         if (mysqli_num_rows($result) > 0) {
            while($row = mysqli_fetch_assoc($result)) {
            echo $row['log_device_id'];
            echo $row['device_timestamp'];
            }

问题是,此查询的结果返回ID和上次时间戳,但$row['device_timestamp']为空,并显示500错误。

此代码的目的是每小时检查每个设备的最后时间戳,并检查它是否处于离线状态。

谢谢。

2 个答案:

答案 0 :(得分:2)

这是一个主意:

sql ='SELECT log_device_id,max(device_timestamp) as max_device_timestamp FROM devicetable group by log_device_id';
$result = mysqli_query($conection, $sql);
     if (mysqli_num_rows($result) > 0) {
        while($row = mysqli_fetch_assoc($result)) {
        echo $row['log_device_id'];
        echo $row['max_device_timestamp'];
        }

您为max(device_timestamp)设置别名,然后获取其值

答案 1 :(得分:0)

$sql ='SELECT log_device_id, device_timestamp FROM devicetable WHERE device_timestamp = (SELECT MAX(device_timestamp) FROM devicetable) group by log_device_id';
$result = mysqli_query($conection, $sql);
if (mysqli_num_rows($result) > 0) {
    while($row = mysqli_fetch_assoc($result)) {
        echo $row['log_device_id'];
        echo $row['device_timestamp'];
    }
}

希望这对您有用。 谢谢。