Выберите строку с максимальной датой из результатов

Используя Pervasive SQL, у меня есть набор результатов:

Tp_No     Name        State    Eff_Date     Actual      Billed   
 1006       ABC        TN      2006-07-01     .1          .5
 1006       ABC        TN      2008-02-15     .27         .6
 1006       ABC        TN      2010-09-01     .37         .7
 1022       Widget     TN      2006-07-01     .1          .5
 1022       Widget     TN      2007-02-22     .27         .6
 1022       Widget     TN      2009-01-01     .37         .7
 1022       Widget     TN      2010-11-11     .38         .71

Мне нужна строка для каждого клиента, компании и штата, где дата MAX:

Tp_No     Name        State    Eff_Date     Actual      Billed 
 1006       ABC        TN      2010-09-01     .37         .7
 1022       Widget     TN      2010-11-11     .38         .71

Что делает его немного более сложным, так это тот факт, что исходный набор результатов является результатом запроса, а не просто прямо из таблицы.

    select a.tp_no, c.name, a.state, b.eff_date, a.er_rate as 'Actual', b.er_rate as 'Billed' 
from "PR_TSUTA" as a 
left join CL_SUTA as b on(a.tp_no=b.loc_no)
left join CL_MAST as c on(b.loc_no=c.loc_no) 
where c.yn_17 = 'A' and a.er_rate != b.er_rate 
order by a.tp_no

заранее спасибо


person jeremib    schedule 08.09.2010    source источник
comment
Что такое .tp_no? Это то же самое, что и ClientNum?   -  person Mark Byers    schedule 08.09.2010
comment
Да. Я только что отредактировал вопрос, чтобы отразить правильные имена столбцов из запроса.   -  person jeremib    schedule 08.09.2010


Ответы (1)


Попробуй это:

SELECT
    a.tp_no AS ClientNum,
    c.name AS Company,
    a.state AS State,
    MAX(b.eff_date) AS Date
FROM "PR_TSUTA" AS a 
LEFT JOIN CL_SUTA AS b ON a.tp_no = b.loc_no
LEFT JOIN CL_MAST AS c ON b.loc_no = c.loc_no
WHERE c.yn_17 = 'A' AND a.er_rate != b.er_rate 
GROUP BY a.tp_no, c.name, a.state

Если вам также нужны значения Actual и Billed, вам следует использовать greatest-n-per-group запрос.

person Mark Byers    schedule 08.09.2010
comment
Извините, я думаю, это имеет большое значение, нужны мне тарифы или нет... Да, нужны. Я проверю ссылку, которую вы разместили. - person jeremib; 08.09.2010