【发布时间】:2015-08-04 08:43:56
【问题描述】:
使用 T-SQL (SQL Server 2008 R2),我试图仅列出临时表中特定列中具有第二高值的行,然后将结果放入新的临时表中。 PK 是ID,它可以有不断增加的版本号,然后是唯一代码。
例子:
ID | Name| Version | Code
------------------------
1 | A | 1 | 10
1 | A | 2 | 20
1 | A | 3 | NULL
2 | B | 1 | 40
2 | B | 2 | 50
2 | C | 1 | 60
查询的期望结果是
ID | Version | Code
------------------------
1 | 2 | 20
2 | 1 | 40
为了实现这一点,只要结果给出的版本号大于 1,我需要调整以下查询以提取第二高的值。这些结果来自临时表,然后将被放入最终结果临时桌子。 编辑:请注意,这将应用于超过 33000 行数据,所以我更喜欢比 INSERT VALUES 更简洁的东西。谢谢。
当前查询:
SELECT
ID
,Version
,Code
INTO
#table2
FROM
#table1
SELECT *
FROM #table2
WHERE Version > 1
ORDER BY ID asc
DROP TABLE #table1
DROP TABLE #table2
我尝试运行 where 子句 WHERE Version < (SELECT MAX(VERSION) FROM #TABLE 2) 但这没有效果,可能是由于唯一的代码值,并且在任何情况下都无法在我有超过 3 个版本的情况下工作。
我们将不胜感激。
提前致谢。
【问题讨论】:
标签: sql-server tsql sql-server-2008-r2