【问题标题】: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 是众所周知的价值观

标签: sql plsql oracle-sqldeveloper plsqldeveloper


【解决方案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
 )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多