【问题标题】:Filter query result by most recent date按最近日期过滤查询结果
【发布时间】:2013-09-14 12:25:25
【问题描述】:

这段代码:

SELECT  
    O896IA_VEMPPRSA.REG_NR & O896IA_VEMPPRSA.DIS_NR AS RRDD,  
    Mgmt_Lvl.MGMT_LVL,  
    Count(O896IA_VEMPPRSA.SYS_EMP_ID_NR) AS Total,  
    Sum(IIf(emp_rlc_ir="Y",1,0)) AS Relocate,  
    Sum(IIf(emp_int_asn_ir="Y",1,0)) AS International_Assignment,  
    Sum(IIf(emp_tvl_ir="y",1,0)) AS Travel,  
    Sum(IIf(emp_spc_asn_ir="y",1,0)) AS Special_Assignment,  
    Sum(IIf([emp_rlc_ir]="Y",1,0))/[Total] AS Relocate_Percent,  
    Sum(IIf([emp_int_asn_ir]="Y",1,0))/[Total] AS International_Assignment_Percent,  
    Sum(IIf([emp_tvl_ir]="y",1,0))/[Total] AS Travel_Percent,  
    Sum(IIf([emp_spc_asn_ir]="y",1,0))/[Total] AS Special_Assignment_Percent

FROM (O867IA_VPJOBCO INNER JOIN Mgmt_Lvl  
    ON O867IA_VPJOBCO.JOB_GRP_CD = Mgmt_Lvl.JOB_GRP_CD)  
INNER JOIN (O896IA_VEMPPRSA INNER JOIN O867IA_VCAREER  
    ON O896IA_VEMPPRSA.SYS_EMP_ID_NR = O867IA_VCAREER.SYS_EMP_ID_NR)  
    ON O867IA_VPJOBCO.JOB_CLS_CD = O896IA_VEMPPRSA.JOB_CLS_CD

WHERE (((O896IA_VEMPPRSA.EMP_EMT_STS_CD)<>"T"))

GROUP BY  
    O896IA_VEMPPRSA.REG_NR & O896IA_VEMPPRSA.DIS_NR, 
    Mgmt_Lvl.MGMT_LVL,  
    Mgmt_Lvl.Ranking

ORDER BY Mgmt_Lvl.Ranking DESC;

给我员工的调查答案,问题是这项调查每年都会进行,我需要最近几年的答案。

我尝试将 MAX 用于 REC_EFF_STT_DT,但对于某些员工,他们的答案每年都会改变,因此由于 group by(我需要),它仍然返回多年的答案。

有什么解决方案可以让我只提取最新数据吗?如果员工在 2008 年、2009 年和 2010 年而不是在 2011 年、2012 年或 2013 年参加调查,则不一定必须是 2013 年,那么我仍然想要 2010 年的数据,他们最近进行的调查是什么我需要。

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    假设您有一个名为 [Survey] 的表,其中包含以下数据

    RespondentID    SurveyDate  Answer1                         Answer2
    ------------    ----------  ----------------------------    ----------------------------
    1               2013-01-01  answer 1, respondent 1, 2013    answer 2, respondent 1, 2013
    1               2012-01-01  answer 1, respondent 1, 2012    answer 2, respondent 1, 2012
    2               2012-01-01  answer 1, respondent 2, 2012    answer 2, respondent 2, 2012
    

    您可以使用表单的查询...

    SELECT Survey.*
    FROM
        Survey
        INNER JOIN
        (
            SELECT RespondentID, MAX(SurveyDate) AS MaxOfSurveyDate
            FROM Survey
            GROUP BY RespondentID
        ) AS MaxDate
            ON Survey.RespondentID = MaxDate.RespondentID
                AND Survey.SurveyDate = MaxDate.MaxOfSurveyDate
    

    ...返回每个受访者的最新行,在本例中为:

    RespondentID    SurveyDate  Answer1                         Answer2
    ------------    ----------  ----------------------------    ----------------------------
    1               2013-01-01  answer 1, respondent 1, 2013    answer 2, respondent 1, 2013
    2               2012-01-01  answer 1, respondent 2, 2012    answer 2, respondent 2, 2012
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-12
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-16
      • 2016-07-10
      • 1970-01-01
      相关资源
      最近更新 更多