从Sybase数据库中选择数据,但只选择序列最高的行

时间:2017-03-31 09:00:01

标签: sql database sybase

我试图从最高序列号中选择我的数据库中的数据,我一直在努力解决这个问题,但是无法让它发挥作用。

数据库中有很多带有数据的列。我只希望搜索具有最高序列号的行中的数据,因为来自较低序列的数据对我来说没有任何价值。不幸的是,不能删除较低序列的行。

数据库看起来像这样:

-----------------------------
| ID | SEQ | rest of the data
-----------------------------
| 1  |  1  | ..
| 1  |  2  | ....
| 2  |  1  | ..
| 1  |  3  | ....
| 3  |  1  | ..
| 1  |  2  | ....
| 4  |  1  | ........

我的问题是,如何只选择序列号最高的ID,并使用WHERE子句搜索这些行?

2 个答案:

答案 0 :(得分:2)

在oracle11g上你可以使用:

SELECT * 
FROM (       
      SELECT YOUR_TABLE.*, RANK() OVER (PARTITION BY ID oRDER BY SEQ DESC) RN 
      FROM YOUR_TABLE) A 
WHERE RN=1;

答案 1 :(得分:0)

SELECT *
FROM   (
  SELECT t.*,
         ROW_NUMBER() OVER ( PARTITION BY ID ORDER BY SEQ DESC ) AS rn
  FROM   your_table t
)
WHERE  rn = 1

SELECT ID,
       MAX( seq ) AS seq,
       MAX( other_column_1 ) KEEP ( DENSE_RANK LAST ORDER BY seq ) AS other_column_1,
       MAX( other_column_2 ) KEEP ( DENSE_RANK LAST ORDER BY seq ) AS other_column_2
      -- ...
FROM   your_table
GROUP BY id

SELECT *
FROM   your_table t
WHERE  seq IN ( SELECT MAX( seq )
                FROM   your_table x
                WHERE  x.id = t.id )

SELECT t.*
FROM   your_table t
       INNER JOIN ( SELECT id, MAX( seq ) AS seq
                    FROM   your_table
                    GROUP BY id ) x
       ON ( x.id = t.id AND x.seq = t.seq )