Sql 您试图执行的查询未将指定的表达式“out\u time”作为ms access中的聚合函数

Sql 您试图执行的查询未将指定的表达式“out\u time”作为ms access中的聚合函数,sql,ms-access,Sql,Ms Access,我使用Ms access作为我的数据库,并使用以下查询获取工作时间: select in_time, out_time, datediff("n",b.in_time,c.out_time) as work_time, log_date, emp_id from (select LogTime as in_time, SrNo, LogID as emp

我使用Ms access作为我的数据库,并使用以下查询获取工作时间:

select 
        in_time,
        out_time,
        datediff("n",b.in_time,c.out_time) as work_time,
        log_date,
        emp_id 
from 
    (select 
        LogTime as in_time,
        SrNo,
        LogID as emp_id,
        LogDate as log_date 
    from LogTemp 
    where Type='IN' ) as b
left join
    (select 
        SrNo as out_id, 
        LogTime as out_time,
        LogID as out_emp_id,
        LogDate as out_log_date 
      from LogTemp 
     where Type = 'OUT'
     group by SrNo) as c
on (b.SrNo <> c.out_id
    and b.emp_id = c.out_emp_id
    and b.log_date = out_log_date ) 
where  
    c.out_id > b.SrNo and 
    [log_date] >= #8/20/2012# and 
    [log_date] <= #8/20/2012# and 
    emp_id = "8" 
group by b.SrNo; 

任何关于我在哪里犯错误的建议。

如果你试图分组,你会有几个错误。首先,检查一下机器

基本上,如果使用GROUP BY,则SELECT子句中不受SUM、AVG等聚合函数影响的任何列都应该出现在GROUP BY子句中,而不必深入讨论。因此,在您的案例中,您应该添加:

LogTime as out_time,
LogID as out_emp_id,
LogDate as out_log_date
进入第二个子查询的分组依据。加

 in_time,
 out_time,
 datediff("n",b.in_time,c.out_time) as work_time,
 log_date,
 emp_id 
在主组的末尾


但是,正如已经在一条评论中指出的,也许你想要做的是一个订单。然后应该像按顺序替换组一样简单,并且应该可以工作。只需确保这是您想要的。

左侧联接处的派生表C不需要任何排序或分组。我看不出为什么它不应该与中的派生表B匹配

left join
    (select 
        SrNo as out_id, 
        LogTime as out_time,
        LogID as out_emp_id,
        LogDate as out_log_date 
      from LogTemp 
     where Type = 'OUT') as c
外部查询的最终语句应该是前面提到的ORDER BY,因为外部查询没有任何聚合函数

我怀疑你在显式连接上会遇到与MS访问不匹配的问题,所以你可能会考虑把它移到WHERE语句。

 on (b.SrNo <> c.out_id

您仅按b.SrNo分组。哪一个输出时间和输入时间,以及记录日期。。。你想要吗?…从外观上看,我猜你的意思是按b.SrNo订购,而不是按GROUP BY订购?非常感谢你的回复,它提到了GROUP BY中的字段,但问题是输出不是比较两行,而是将所有行相互比较![表结构][1]SrNo LOGID LOGDATE LOGTIME TYPE 1 8 8/20/2012 9:32:12 AM我的输出应进行比较,并提供连续行的输入和输出时间差。不是所有的进出行。请找到附加的屏幕。非常感谢您的回复。将字段放入group by后,它可以工作,但问题是输出不是比较两行,而是将所有行相互比较。我的表格结构SrNo LOGID LOGDATE LOGTIME 1 8 8 8/20/2012 9:32:12英寸;2012年8月20日上午9:52.10外出;2012年8月20日上午9时56分10分;2012年8月20日下午12:30外出。我的输出应该比较并提供连续行的输入和输出时间的差异。不是所有的进出行。请找到屏幕。
 on (b.SrNo <> c.out_id