SQL - 如果结果集包含多于一行,则返回最新(id)结果

Posted

技术标签:

【中文标题】SQL - 如果结果集包含多于一行,则返回最新(id)结果【英文标题】:SQL - Return latest (id) result if resultset contains more than one row 【发布时间】:2012-08-03 11:56:54 【问题描述】:

如果查询将返回多个结果,我需要在我的选择中设置一个条件,在该条件下我将获得最新的 (id) 行。 (IBM db2)

即:

ID--NUM1--COUNTRY--NUM2

1--123--SE--123

2--123--US--123

我希望返回第 2 行,而不是返回两行。

编辑:

我的查询现在看起来像这样:

SELECT   LET1.INSTANCE_ID, COU.CODE, SUP1.SUPPLIERID, PAR.PARTNUMBER 

FROM     TABLES

WHERE    TABLEJOIN_CONDITIONS

AND      TABLE.COLUMN IN ('11994', '12345' and so on)

但是这个查询可以返回重复的行。

喜欢:

ID--NUM1--COUNTRY--NUM2

1--123--SE--11994 (11994 appearing twice, then I want the latest row which is row number 2)

2--123--US--11994

【问题讨论】:

所以你想要ID最大的那一行? 【参考方案1】:

我对哪些数字使它“独一无二”有点困惑,但如果您只想为每个 NUM1, NUM2 组合提供最新的 ID,那么您可以执行以下操作:

SELECT *
FROM (
    SELECT A.*, 
           ROW_NUMBER() OVER (PARTITION BY NUM1, NUM2 ORDER BY ID DESC) AS RN
    FROM YOUR_TABLE A
)
WHERE RN = 1

子选择将为每个num1num2 组合分配一个行号,按ID 排序,并且只为该组合选择第一行。

【讨论】:

【参考方案2】:

对id进行降序排序,只取第一条记录。

我不是最新的 db2 语法,但类似:

SELECT id, num1, country, num2
FROM SomeTable
ORDER BY ID DESC
FETCH FIRST 1 ROW ONLY

【讨论】:

这当然假设他是根据num1/country/num2 直接查询,或者它只会给他一行total,而不是一行每个元组的行。

以上是关于SQL - 如果结果集包含多于一行,则返回最新(id)结果的主要内容,如果未能解决你的问题,请参考以下文章

常用SQL脚本记录一

如果存储过程在 SQL Server 2005 上的选择之前进行更新,则没有结果集

Oracle SQL:ORA-01427:单行子查询返回多于一行

SQL 在 select 子查询中只返回一行或 null

子查询结果 '单行子查询结果多于一行'

SQL Server游标