2010-01-11 66 views
1

我有一個加入選擇語句,我只需要第二個表中的最後修改字段。這裏的select語句,我現在有:sql查詢 - 加入只返回最後一行

SELECT NOM,PRENOM,OEDP.NUM_EMP,N_A_S,SIT_STATUT,PERMIS,DATE_EMBAUCHE,ADRESSE1,VILLE1,PROVINCE1,CODE_POSTAL1,TEL_RESIDENCE 
FROM ODS_EMPLOYE_DOSSIER_PERSONNEL AS OEDP 
JOIN ODS_SITUATION_POSTE AS OSP 
ON  OEDP.NUM_EMP = OSP.NUM_EMP 
WHERE SIT_DATE_CHG = MAX(SIT_DATE_CHG) 
ORDER BY 
     OEDP.NUM_EMP 

我得到了如下因素ERREUR消息:

聚合不應出現在WHERE子句中,除非它是包含在HAVING子句或選擇在子查詢列表,並且被聚合的列是外部參考。

+0

是你使用2005+? – Hogan 2010-01-11 18:58:40

+0

(從高中回憶法語) – Hogan 2010-01-11 18:59:21

回答

2
SELECT NOM,PRENOM,OEDP.NUM_EMP,N_A_S,SIT_STATUT,PERMIS,DATE_EMBAUCHE,ADRESSE1,VILLE1,PROVINCE1,CODE_POSTAL1,TEL_RESIDENCE 
FROM ODS_EMPLOYE_DOSSIER_PERSONNEL AS OEDP 
CROSS APPLY 
     (
     SELECT TOP 1 * 
     FROM ODS_SITUATION_POSTE AS OSP 
     WHERE OEDP.NUM_EMP = OSP.NUM_EMP 
     ORDER BY 
       SIT_DATE_CHG DESC 
     ) OSP 
ORDER BY 
     OEDP.NUM_EMP 

實際上,有幾種方法可以做到這一點,它們的效率取決於數據如何在表中分佈。

看到這篇文章在我的博客對這些方法的比較:

+0

CROSS APPLY ????? – Hogan 2010-01-11 18:56:21

+0

'@ Hogan':'CROSS APPLY' !!!!! – Quassnoi 2010-01-11 19:03:37

+0

@Quassnoi:我不是第二個更好的例子嗎? (我猜這不適用於2005年以前) – Hogan 2010-01-11 19:05:37

0
SELECT TOP 1 NOM,PRENOM,OEDP.NUM_EMP,N_A_S,SIT_STATUT,PERMIS,DATE_EMBAUCHE,ADRESSE1,VILLE1,PROVINCE1,CODE_POSTAL1,TEL_RESIDENCE 
FROM ODS_EMPLOYE_DOSSIER_PERSONNEL AS OEDP 
JOIN ODS_SITUATION_POSTE AS OSP ON OEDP.NUM_EMP = OSP.NUM_EMP 
ORDER BY SIT_DATE_CHG DESC 

隨着2005年的所有員工將是這樣的:

WITH LastUserInfo AS 
(
    SELECT NUM_EMP, MAX(SIT_DATE_CHG) AS SIT_DATE_CHG 
    FROM ODS_EMPLOYE_DOSSIER_PERSONNEL AS OEDP 
    JOIN ODS_SITUATION_POSTE AS OSP 
    ON  OEDP.NUM_EMP = OSP.NUM_EMP 
    GROUP BY NUM_EMP 
) 
SELECT NOM,PRENOM,OEDP.NUM_EMP,N_A_S,SIT_STATUT,PERMIS,DATE_EMBAUCHE,ADRESSE1,VILLE1,PROVINCE1,CODE_POSTAL1,TEL_RESIDENCE 
FROM ODS_EMPLOYE_DOSSIER_PERSONNEL AS OEDP 
JOIN ODS_SITUATION_POSTE AS OSP 
ON  OEDP.NUM_EMP = OSP.NUM_EMP 
INNER JOIN LastUserInfo L ON NUM_EMP = L.NUM_EMP AND SIT_DATE_CHG = L.SIT_DATE_CHG 
ORDER BY 
     OEDP.NUM_EMP 
+0

這將在'SIT_DATE_CHG'上重複所有關係。 – Quassnoi 2010-01-11 19:06:33