具有另一列的两个值的最大版本
Max version with both values of another Column
我想展示一个 table 的最后一个版本,在另一个上显示两个值。
Version | Value
12 | ORANGE
11 | ORANGE
11 | BANANA
10 | ORANGE
11 | BANANA
结果应该是
11 | ORANGE
11 | BANANA
有人可以帮助我吗?
这应该符合您的描述:
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
)
这应该有效
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)
)
)
这个技巧 return 你从 Max 版本到 min 版本,只有当 banana 和 orange 共享确切的版本号时它才有效。
这意味着如果 Orange 跳过一个版本(从 11 到 13 而没有 12)而 banana 恰好是 12,它将不起作用。
我想展示一个 table 的最后一个版本,在另一个上显示两个值。
Version | Value
12 | ORANGE
11 | ORANGE
11 | BANANA
10 | ORANGE
11 | BANANA
结果应该是
11 | ORANGE
11 | BANANA
有人可以帮助我吗?
这应该符合您的描述:
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
)
这应该有效
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)
)
)
这个技巧 return 你从 Max 版本到 min 版本,只有当 banana 和 orange 共享确切的版本号时它才有效。 这意味着如果 Orange 跳过一个版本(从 11 到 13 而没有 12)而 banana 恰好是 12,它将不起作用。