SQL隔离列中的最大值

时间:2010-01-13 13:34:53

标签: sql sql-server-2008

我从视图中得到以下输出:

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 个答案:

答案 0 :(得分:2)

SELECT MAX(xfer_id), client_plt_id FROM table GROUP BY client_plt_id;

答案 1 :(得分:1)

这些查询都会为每个不同的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)

答案 2 :(得分:1)

您可以尝试这样的事情

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

答案 3 :(得分:0)

您正在寻找Group By clause

我举一个例子,但你没有指定你正在使用的数据库。