具有另一列的两个值的最大版本
Posted
技术标签:
【中文标题】具有另一列的两个值的最大版本【英文标题】:Max version with both values of another Column 【发布时间】:2016-08-24 15:13:53 【问题描述】:我想展示一个表格的最后一个版本,其中两个值都显示在另一个表格上。
Version | Value
12 | ORANGE
11 | ORANGE
11 | BANANA
10 | ORANGE
11 | BANANA
结果应该是
11 | ORANGE
11 | BANANA
有人可以帮我吗?
【问题讨论】:
是否有任何逻辑可以得到这个结果? 我想要一个显示两行最大版本和两个值的选择。 但是为什么 Orange 是 11 而不是 12? 您的意思是两个值都存在的最大版本?这些值是已知的还是任何值? 这是另一个问题(存在于 11 而不是 12)我必须删除所有其他行,除了带有 BANANA 和 ORANGE 的最大版本。 BANANA 和 ORANGE 是众所周知的价值观 【参考方案1】:这应该有效
SELECT *
FROM TABLE
WHERE VERSION IN (
SELECT MIN(VERSION) -- GET MIN VERSION FROM MAX
FROM (
SELECT MAX(VERSION) as VERSION,
FROM TABLE
GROUP BY VALUE)
)
)
这个技巧会从 Max 版本返回 min 版本,它只有在香蕉和橙色共享确切的版本号时才有效。 这意味着,如果 Orange 跳过了一个版本(从 11 到 13,而没有 12)并且香蕉正好是 12,它将不起作用。
【讨论】:
添加新行时也会失败13 | BANANA
同意,也许我们可以正确地使用@dnoeth 回复,因为他的脚本会找到与 Banana 和 Orange 相同的较低版本。我们还可以通过对不同值元素的新查询来更改 Have 子句,而不仅仅是 2【参考方案2】:
这应该与您的描述相符:
SELECT * FROM tab
WHERE Version IN
(
SELECT MAX(Version) OVER ()
FROM tab
-- WHERE Value in ('ORANGE','BANANA') ???
GROUP BY Version
-- HAVING COUNT(DISTINCT Value) -- if duplicates exist
HAVING COUNT(*) = 2 -- only versions with two entries
)
【讨论】:
以上是关于具有另一列的两个值的最大版本的主要内容,如果未能解决你的问题,请参考以下文章