【问题标题】:Select data from Sybase database but only select the row with the highest sequence从 Sybase 数据库中选择数据,但只选择序列最高的行
【发布时间】:2017-03-31 19:17:50
【问题描述】:

我正在尝试从我的数据库中从最高序列号中选择数据,我已经为此苦苦挣扎了一段时间,但无法让它工作。

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

数据库如下所示:

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

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

【问题讨论】:

    标签: sql database sybase


    【解决方案1】:

    在 oracle11g 上你可以使用:

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

    【讨论】:

    • 感谢您的回复,我检查了数据库以确定。我正在使用 Sybase SQL。很遗憾,您的查询无效
    • @Wvs 在标签中添加 oracle 和其他数据库之前,您应该检查一下。现在,此人为您进行了查找和其他工作
    【解决方案2】:
    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 )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-04
      • 2014-07-05
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      相关资源
      最近更新 更多