2010-01-11 36 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