SQL изолирует наибольшие значения в столбце - PullRequest
1 голос
/ 13 января 2010

У меня есть следующий вывод из вида:

xfer_id  client_plt_id xfer_doc_no
2255     80016616        KANORANJE1
2270     80016616        ORANJECFC1
2285     80016616        CFCFPT1
2285     80016623        CFCFPT1
2270     80016623        ORANCFC1
2255     80016623        KANORANJE1
2255     80016630        KANORANJE1
2270     80016630        ORANCFC1
2285     80016630        CFCFPT1

Если существует более одного client_plt_id с одинаковым номером, я хочу изолировать строку с наибольшим xfer_id.

Для client_plt_id = 80016616 это будет xfer_id = 2285, например.

Есть идеи, как мне это сделать?

Редактировать: я использую MS-SQL 2008

Ответы [ 4 ]

2 голосов
/ 13 января 2010
SELECT MAX(xfer_id), client_plt_id FROM table GROUP BY client_plt_id;
1 голос
/ 13 января 2010

Вы можете попробовать что-то вроде этого

DECLARE @TABLE TABLE(
        xfer_id  INT,
        client_plt_id INT, 
        xfer_doc_no VARCHAR(100)

)

INSERT INTO @TABLE (xfer_id ,client_plt_id,xfer_doc_no) SELECT 2255,80016616,'KANORANJE1'
INSERT INTO @TABLE (xfer_id ,client_plt_id,xfer_doc_no) SELECT 2270,80016616,'ORANJECFC1' 
INSERT INTO @TABLE (xfer_id ,client_plt_id,xfer_doc_no) SELECT 2285,80016616,'CFCFPT1' 
INSERT INTO @TABLE (xfer_id ,client_plt_id,xfer_doc_no) SELECT 2285,80016623,'CFCFPT1' 
INSERT INTO @TABLE (xfer_id ,client_plt_id,xfer_doc_no) SELECT 2270,80016623,'ORANCFC1' 
INSERT INTO @TABLE (xfer_id ,client_plt_id,xfer_doc_no) SELECT 2255,80016623,'KANORANJE1' 
INSERT INTO @TABLE (xfer_id ,client_plt_id,xfer_doc_no) SELECT 2255,80016630,'KANORANJE1' 
INSERT INTO @TABLE (xfer_id ,client_plt_id,xfer_doc_no) SELECT 2270,80016630,'ORANCFC1' 
INSERT INTO @TABLE (xfer_id ,client_plt_id,xfer_doc_no) SELECT 2285,80016630,'CFCFPT1' 

SELECT  t.*
FROM    @TABLE t INNER JOIN
        (
            SELECT  client_plt_id,
                    MAX(xfer_id) Max_xfer_id
            FROM    @TABLE
            GROUP BY client_plt_id
        ) maxVals ON t.client_plt_id = maxVals.client_plt_id 
                AND t.xfer_id = maxVals.Max_xfer_id
1 голос
/ 13 января 2010

Оба этих запроса изолируют строку с наибольшим xfer_id для каждого отдельного client_plt_id

select xfer_id, client_plt_id, xfer_doc_no
from   tab t1
where  xfer_id = (
       select max(xfer_id)
       from   tab t2
       where  t2.client_plt_id = t1.client_plt_id
   )

или, для mysql, это может быть лучше:

select xfer_id, client_plt_id, xfer_doc_no
from   tab t1
inner join (
       select max(xfer_id), client_plt_id
       from   tab
       group by client_plt_id
       ) t2
on     t1.client_plt_id = t2.client_plt_id
and    t1.xfer_id = t2.xfer_id

Для обоих этих запросов вы можете просто добавить предложение WHERE для выбора на конкретном клиенте. Просто добавьте например WHERE client_plt_id = 80016616.

Если вам просто нужна одна строка с самым высоким xfer_id, независимо от client_plt_id, вам нужно:

select xfer_id, client_plt_id, xfer_doc_no
from   tab t1
where  xfer_id = (select max(xfer_id) from tab)
0 голосов
/ 13 января 2010

Вы ищете предложение Group By .

Я бы привел пример, но вы не указали, какую базу данных вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...