2017-10-19 81 views
0

我花了一些時間在StackOverflow上尋找這個答案,並嘗試了一堆這些解決方案,但沒有運氣。我覺得我錯過了一些小事,但我無法解決它。注 - 學習SQL並使用Access,因爲這是工作使用的。MS Access SQL - 每個顧問的最新記錄ID

我有2和表1中有(列顧問信息:顧問ID,姓,名,活動(是或否複選框)第二臺都有自己每週號碼(列: AutoGenID,顧問ID,WeekOf(日期),全面服務,諮詢,分類,重新分配,RecruitmentSrvs),並加入ConsultantID(主鍵)

我建立了一個簡單的查詢來加入2表,並顯示所有結果只爲活躍的顧問在qry_Join中(任何標記爲未激活的人不會顯示在此查詢中)qry_Join返回顧問ID,名,&姓(來自tbl_Consultants)然後WeekOf(日期),FullService,諮詢,分類,重新分配,Recruitm來自tbl_WeeklyNumbers的entSrvs。

問:

我想有一個查詢,只顯示最近WeekOf(日期)每個顧問項目。

問題:我使用

SQL低於但我遇到的問題是,如果ConsultantID#的3,4,5,6,7 &使用2017年10月11日的日期和那麼ConsultantID#8將使用10/12/2017,因爲查詢最近纔會返回ConsultantID#8的行。我需要它仍然會返回所有其他顧問最近行以及即使他們是一個日期ConsultantID之前#787-8

SQL:

SELECT ConsultantID, FirstName, WeekOf, USFullService, USConsulting, Classified, Reallocations, RecruitmentSrvs 
FROM qry_Join 
Where WeekOf = (SELECT MAX(WeekOf) FROM qry_Join) 
+0

退房DATEPART(): SELECT ConsultantID,名字,WeekOf,USFullService,USConsulting,分類,重新分配, RecruitmentSrvs FROM qry_Join Where DATEPART(wk,WeekOf)=(SELECT MAX(DATEPART(wk,WeekOf))FROM qry_Join) –

回答

1

只是通過ConsultantID到您的子查詢:

SELECT ConsultantID, FirstName, WeekOf, USFullService, USConsulting, Classified, Reallocations, RecruitmentSrvs 
FROM qry_Join q 
Where WeekOf = (SELECT MAX(s.WeekOf) FROM qry_Join s WHERE s.ConsultantID = q.ConsultantID) 
+0

感謝發佈此工作很好。只有一個問題,我看到你說qry_join爲「q」,那麼「s」是做什麼的?該系統如何解釋,因爲我沒有維度(對不起,如果這是錯誤的詞)它在任何地方? –

+0

這些是別名。您在查詢中看到,我使用'.WeekOf',以確保我正在使用我剛剛命名爲's'的查詢中的'WeekOf'field。我還將's.ConsultantID'(子查詢的'ConsultantID')與'q.ConsultantID'(主查詢的'ConsultantID')進行比較。因爲我使用相同的查詢兩次,所以需要它。因爲's'在主查詢中超出了範圍,所以在那裏並不需要(但是您可以在所有字段之前添加'q.'來更加明確) –

1
SELECT ConsultantID, 
     FirstName, 
     WeekOf, 
     USFullService, 
     USConsulting, 
     Classified, 
     Reallocations, 
     RecruitmentSrvs 
    FROM qry_Join INNER JOIN 
     (SELECT MAX(WeekOf) maxwkof ,ConsultantID cid 
      FROM qry_Join 
      GROUP BY ConsultantID) 
    ON ConsultantID = cid 
    WHERE maxwkof = WeekOf 

在您的查詢的問題,下面的查詢會在整個表中的最大日期。而最大ID只匹配一名顧問。所以,你得到一個行

WeekOf = (SELECT MAX(WeekOf) FROM qry_Join) 

下面的查詢會給每個顧問的最大日期。這樣你就可以加入最大日期和顧問ID來獲取每個顧問的細節在其最新weekoff

SELECT MAX(WeekOf) maxwkof ,ConsultantID cid 
       FROM qry_Join 
       GROUP BY ConsultantID 
+0

對於SQL來說,這是一個全新的東西,您的答案是否有優勢?下面的答案?我只是想了解這種差異以及系統如何運作?謝謝! –

+1

上一個被稱爲co相關子查詢(在子查詢中引用外部查詢參數)。在這裏我收集所有顧問ID和他們相應的最大週轉,然後檢索相應的結果。性能,這取決於數據庫。所以你必須同時運行並選擇適合你的更快的工作。 – Valli

+0

'AND = cid'應該是'AND ConsultantID = cid',你可能要考慮把'WHERE'條件移到'INNER JOIN'''ON'條件。 –