繁体   English   中英

根据一列中的最大值选择分组记录

[英]Selecting Grouped Records based on max value in a column

我无法理解这一点,我有一个“ funkky”子查询:

SELECT  
"Requisition_ID",  
"Candidate_ID",  
"Application_Date",   
CA."Process_of_Activity",  
CA."Activity",   
"Completed_on",  
add_minutes(cast("Completed_on" as timestamp),STAT."Rank") as "Current Completed on"  

FROM CA

left join STATUS as STAT   
on CA."Process_of_Activity" = STAT."Process_of_Activity" and CA."Activity" = STAT."Activity"  
GROUP BY "Requisition_ID","Candidate_ID","Application_Date", STAT."Rank", CA."Process_of_Activity", CA."Activity", "Completed_on";  

这基本上给了我一张有7列的表格。 我需要一个具有相同的7列的结果,前7个列按分组,最后3列为最大。 例如。 如果原始子查询显示了我:

Requisition_ID  Candidate_ID    Application_Date    Process_of_Activity Activity         Completed_on   Current Completed on
123              555            16/12/2015          To be Rejected      Rejection        08/03/2016     08/03/2016 00:29
123              555            16/12/2015          To be Rejected      Letter:Rejection 08/03/2016     08/03/2016 00:00
123              555            16/12/2015          Application Entry   Questionnaire    16/12/2015     16/12/2015 00:00
123              555            16/12/2015          Application Entry   Application Entr 08/03/2016     08/03/2016 00:01

在这种情况下,我只希望看到此示例的第一行...因此我想按“ Requisition_ID”,“ Candidate_ID”,“ Application_Date”分组

还可以看到这些值的含义:CA.“ Process_of_Activity”,CA.“ Activity”,“ Completed_on”

其中“当前完成日期”最大。 但系统中当然还有更多的请购单,候选人和申请日期。 我正在使用dashDB。

为此,您可以使用row_number / rank / dense_rank。 您需要以下内容:

SELECT *
    FROM 
    (
    SELECT "Requisition_ID",
        "Candidate_ID",
        "Application_Date",
        "Process_of_Activity",
        "Completed_on",
        cco,
        ROW_NUMBER()OVER(PARTITION BY "Requisition_ID",
        "Candidate_ID",
        "Application_Date"
        ORDER BY cco DESC)rn
        FROM 
        (
        SELECT
            "Requisition_ID",
            "Candidate_ID",
            "Application_Date",
            CA."Process_of_Activity",
            CA."Activity",
            "Completed_on",
            add_minutes(CAST("Completed_on" AS TIMESTAMP),STAT."Rank") AS "cco"
            FROM CA
            LEFT JOIN STATUS AS STAT
            ON CA."Process_of_Activity" = STAT."Process_of_Activity" AND CA."Activity" = STAT."Activity"
            GROUP BY "Requisition_ID",
                "Candidate_ID",
                "Application_Date",
                STAT."Rank",
                CA."Process_of_Activity",
                CA."Activity",
                "Completed_on"
        ) AS INNER_QUERY)AS OUTER_QUERY
    WHERE rn=1    

此SQL不在dasdb上编译,但row_number函数很重要。 它会给你的想法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM