2016-10-28 2 views
0

я не могу получить мою голову вокруг этого, у меня есть «funcky» подзапрос:Выбор сгруппированных записей на основе максимального значения в столбце

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 столбцами GROUPED по первым 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. "активность", "Completed_on"

где "ток Завершенный на" составляет макс. , но, конечно, гораздо больше заявок, кандидатов и дат применения в системе. Я использую dashDB.

ответ

1

Для этой цели можно использовать 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, важен. это даст вам представление.

+1

Привет, я получаю эту ошибку: Неожиданный токен "QUALIFY" был найден после "" Completed_on ") x". Ожидаемые жетоны могут включать: «ИДЕТ». SQLCODE = -104, SQLSTATE = 42601, DRIVER = 3.69.56 –

+0

@MikePala использовать, где вместо квалификации. –

+0

, когда я использую «HAVING» вместо QUALIFY. Я получаю следующее: Недопустимое использование функции агрегата или функции OLAP. SQLCODE = -120, SQLSTATE = 42903, DRIVER = 3.69.56 –

Смежные вопросы