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
子选择将为每个num1
、num2
组合分配一个行号,按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 Server 2005 上的选择之前进行更新,则没有结果集