2

以下是我正在尝试运行的查询。

select location_data.trip_code,sum(max(device_time)-min(device_time)) from location_data,trip_management 
where location_data.source_id=3 and location_data.trip_code=trip_management.trip_code
group by location_data.trip_code

在trip_managemnet 和location_data 表中都有由trip_code 标识的各种旅行。这些旅行由一个唯一标识的用户(source_id=)3 进行。我在这里要做的是将每次旅行的所有时间差相加,然后使用 sec_to_time 函数将其转换为 hh:mm:ss 以显示用户 3 完成所有旅行所花费的总时间。

上述查询的问题在于,一旦我将 sum() 应用于每次行程的最大和最小设备时间的差异,它就会生成错误 1111。我买不起子查询,因为这本身就是更大查询中的子查询。

我希望我很好地解释了这个问题。

4

1 回答 1

4

这里的问题是您试图在聚合SUM()上应用聚合MAX(),MIN(),但实际上这两个级别在不同的组上运行。内部的一组超过location_data.trip_code,而外部的一组超过那的结果。您需要将其包装在子查询中:

SELECT
  trip_code,
  /* Outer query sums the inner aggregates */
  SUM(max_time - min_time) AS time_sum
FROM (
  SELECT 
    location_data.trip_code,
    /* Inner aggregates return the max & min times only */
    max(device_time) AS max_time,
    min(device_time) AS min_time
  FROM
     location_data,
     INNER JOIN trip_management ON location_data.trip_code = trip_management.trip_code
  WHERE
     location_data.source_id=3
  GROUP BY location_data.trip_code
) first_group
GROUP BY trip_code

我还用显式替换了你的隐式连接INNER JOIN,这是当今的首选语法。

于 2013-05-01T12:48:57.547 回答