具有聚合和分组功能的MS Access查询错误

时间:2017-08-10 08:33:09

标签: ms-access group-by aggregate-functions

我只是希望通过MS Access数据库了解我现在面临的问题。我实际上可以从简单的查询语句中获得结果,但每当我使用Aggregate和/或Group By函数时,我都会收到错误。

$rowno = 1;

$query = "SELECT COL1, MIN(COL2) AS time_in, MAX(COL2) AS time_out FROM TBL
        WHERE FORMAT(COL2, 'yyyy') = '2017' 
        GROUP BY COL1 
        ORDER BY COL2 DESC";

foreach ($dbh->query($query) as $row){
    echo $rowno . ") " . $row['COL1'] . " - " . $row['time_in'] . " - " . $row['time_out'] . "<br/>";
    $rowno++;
}

它给了我:

  

警告:为...中的foreach()提供的参数无效

我的困惑是为什么当实际上相同的查询语句与另一个MS Access数据库一起使用时,这些函数不起作用?这是数据或版本问题吗?我删除了MIN()MAX()GROUP BY内容后,该声明正常有效。

但无论如何,这里有一个示例数据,可以在我目前正在使用的数据库中看到:

COL1          COL2
 1      8/10/2017 4:53:31 PM
 1      8/10/2017 4:50:31 PM
 2      8/10/2017 4:43:31 PM
 2      8/10/2017 4:40:31 PM
 3      8/10/2017 4:33:31 PM
 3      8/10/2017 4:30:31 PM

1 个答案:

答案 0 :(得分:2)

当您使用总计查询时,您的ORDER BY语句不是聚合。这应该有效:

$query = "SELECT COL1, MIN(COL2) AS time_in, MAX(COL2) AS time_out FROM TBL
        WHERE FORMAT(COL2, 'yyyy') = '2017' 
        GROUP BY COL1 
        ORDER BY MIN(COL2) DESC";

如果您的订单不是聚合,则可能发生冲突。假设您有下表:

COL1          COL2
 1      8/10/2017 4:53:31 PM
 1      8/10/2017 4:50:31 PM
 2      8/10/2017 4:59:31 PM
 2      8/10/2017 4:40:31 PM

如果您只是按COL2订购,则Access无法知道是否应在COL1: 1之前或之后放置COL1: 2的汇总行,因为对于COL1:2COL2COL1: 1更高(第3行)和更低(第4行)