2010-01-11 37 views
0

使用Access 2003查询服务表现问题

查询

SELECT t1.PERSONID  ,t1.CARDEVENTDATE 
     ,MIN(t2.CARDEVENTTIME) AS Intime 
     ,MAX(t3.CARDEVENTTIME) AS Outtime, 
Min(t3.Cardeventtime) as BreakOut, 
Max(t4.CardEventTime) as BreakIn 

FROM ((( SELECT PERSONID 
       , CARDEVENTDATE 
         FROM T_CARDEVENT) as t1 
LEFT OUTER JOIN (SELECT PERSONID 
           ,CARDEVENTDATE, FUNCTION 
            , CARDEVENTTIME 
         FROM T_CARDEVENT WHERE (FUNCTION = 'A')) as t2 
ON t1.PERSONID = t2.PERSONID 
      AND t1.CARDEVENTDATE = t2.CARDEVENTDATE) LEFT OUTER JOIN (SELECT PERSONID 
           ,CARDEVENTDATE, FUNCTION 
            , CARDEVENTTIME 
         FROM T_CARDEVENT WHERE (FUNCTION = 'D')) as t3 
ON t1.PERSONID = t3.PERSONID 
      AND t1.CARDEVENTDATE = t3.CARDEVENTDATE) LEFT OUTER JOIN (SELECT PERSONID 
           ,CARDEVENTDATE, FUNCTION 
            , CARDEVENTTIME 
         FROM T_CARDEVENT WHERE (FUNCTION = 'B')) as t4 
ON t1.PERSONID = t4.PERSONID 
      AND t1.CARDEVENTDATE = t4.CARDEVENTDATE) LEFT OUTER JOIN (SELECT PERSONID 
           ,CARDEVENTDATE, FUNCTION 
            , CARDEVENTTIME 
         FROM T_CARDEVENT WHERE (FUNCTION = 'C')) as t5 
ON t1.PERSONID = t5.PERSONID 
      AND t1.CARDEVENTDATE = t5.CARDEVENTDATE 

      GROUP BY t1.PERSONID, t1.CARDEVENTDATE 

当我运行上面的查询,它正在采取太多的时间来查看结果,所以有时它是显示错误消息“还不够在内存中的临时空间“

有任何其他的方式来访问这样的查询。

需要查询帮助

+0

我不认为你是从SQL视图中剪切和粘贴你的SQL,因为上面的查询失败了,我相当确定顶部应该在某个阶段引用t5。如果你发布真正的SQL,这将是最好的。 – Fionnuala 2010-01-11 12:43:12

回答

1

您的查询是一个烂摊子......我不知道你打算做..所以这里有一些乱撞,在回答中,而不是评论的形式是什么..但因为所有的连接被左外连接我无法格式化的意见..

..

我建议你尝试玩这个:通过CARDEVENT一组:

select FUNCTION 
    , PERSONID 
    , min(cardeventdate) 
    , max(cardeventdate) 
    from T_CARDEVENT 
where FUNCTION in ('A','B','C','D') 
group by FUNCTION,PERSONID 

PS (对我来说)DATE和最小/最大值在同一领域没有多大意义。

+0

@Lexu,你不明白我的查询,它是如何工作的。我想获得ID,日期,最小(时间)其中函数= A,最大(时间)其中功能= D,最小(时间)其中功能= B,最大(时间)其中功能= C.所以我的查询将显示ID ,日期,四种类型的时间。我上面提到的查询在sql中工作。但在Access中,它花费了太多时间。 – Gopal 2010-01-11 07:02:00

+0

我做了状态,我不明白你想做什么:-)你的查询是用SQL编写的(我认为你的意思是SQL-Server?)..性能差的原因是'左外部'连接并可能缺乏指数。最好重新构建数据库或使用其他方法。 – lexu 2010-01-11 07:48:36