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