SQL выбрать одну строку из макс (дата) - PullRequest
0 голосов
/ 06 сентября 2018

Я пытался получить какую-то конкретную информацию, но не смог ее получить.

SELECT 
    idStyle, 
    idStyleDtl, 
    costPrice, 
    MAX(createDt) created, 
    idCustomer 
FROM INVOICE_DTL
GROUP BY 
    idStyle, idStyleDtl,costPrice, idCustomer
ORDER BY 
    idStyle, idCustomer

Это мой запрос и

Result

Это результат. То, что я ожидал, хотя выделенная часть будет объединена и покажет только одну строку с created:2017-02-01 12:38:31.597 и costPrice:11.50 (потому что это та же строка, что и MAX(createDt)), поскольку они имеют одинаковые idStyle, idStyleDtl и idCustomer , Я думал, что MAX(costPrice) может быть, но он только что вернулся выше costPrice, а не тот, что в том же ряду, что и MAX(createDt).

Я хочу получить одну целую строку с результатом MAX(createDt), если есть такие же idStyle, idStyleDtl и idCustomer.

Буду признателен даже за небольшой совет. Спасибо!

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Часто наиболее эффективным методом является коррелированный подзапрос:

select i.* 
from invoice_dtl i
where i.created_dt = (select max(i2.created_dt)
                      from invoice_dtl i2
                      where i2.idCustomer = i.idCustomer and 
                            i2.idStyle = i.idStyle and
                            i2.idStyleDtl = i.idStyleDtl
                     )
order by i.idStyle, i.idCustomer;

В частности, это может использовать индекс (idCustomer, idStyle, idStyleDtl, created_dt).

0 голосов
/ 06 сентября 2018

Вы можете попытаться использовать ROW_NUMBER с оконной функцией , чтобы сделать номер строки по столбцам idStyle, idStyleDtl, idCustomer и упорядочить по createDt DESC в подзапросе.

затем получите rn = 1 данные, которые означают максимальную дату.

SELECT * FROM (
    SELECT 
        idStyle, 
        idStyleDtl, 
        costPrice, 
        createDt, 
        idCustomer,
        ROW_NUMBER() OVER(PARTITION BY idStyle, idStyleDtl, idCustomer ORDER BY createDt DESC) rn
    FROM INVOICE_DTL
) t1
where rn = 1
ORDER BY 
    idStyle, idCustomer
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...