SQL子查询:如果条件为true,则获取此“组”的所有行;如果条件为false,则获取非
作为第一次查询的结果,我有以下格式的数据。 现在我需要添加带有条件的第二个查询,这对我来说很难,也许有人可以帮我解决这个问题 条件是: 如果product_id最高的customers行的类型为Y,则取给定customer的所有行,如果为X,则取非 因此,我需要以某种方式为每个具有最高产品id的客户行进行选择,检查该行中的类型是否为Y,然后根据结果获取所有或非给定客户数据SQL子查询:如果条件为true,则获取此“组”的所有行;如果条件为false,则获取非,sql,sql-server,tsql,Sql,Sql Server,Tsql,作为第一次查询的结果,我有以下格式的数据。 现在我需要添加带有条件的第二个查询,这对我来说很难,也许有人可以帮我解决这个问题 条件是: 如果product_id最高的customers行的类型为Y,则取给定customer的所有行,如果为X,则取非 因此,我需要以某种方式为每个具有最高产品id的客户行进行选择,检查该行中的类型是否为Y,然后根据结果获取所有或非给定客户数据 index customer product_id type ----------------------
index customer product_id type
-----------------------------------------
1 1 51 X
2 1 42 Y
3 1 11 X
4 2 4 Y
5 2 2 Y
6 3 41 Y
7 3 22 Y
8 3 21 X
9 3 20 X
10 4 16 X
11 4 15 Y
12 4 14 Y
13 4 13 Y
14 4 12 Y
因此,在上面的示例中,我想返回行:4,5,6,7,8,9使用第一个值窗口函数:
SELECT [index], [customer], [product_id], [type]
FROM (
SELECT *, FIRST_VALUE([type]) OVER (PARTITION BY [customer] ORDER BY [product_id] DESC) [value]
FROM tablename
) t
WHERE [value] = 'Y'
看。
结果:
让我给你最后一票,你需要达到10万。。。祝贺你取得这一成就@GMB谢谢,但从我看到的情况来看,有一个连续的+4向上投票,这将被系统逆转。。。
> index | customer | product_id | type
> ----: | -------: | ---------: | :---
> 4 | 2 | 4 | Y
> 5 | 2 | 2 | Y
> 6 | 3 | 41 | Y
> 7 | 3 | 22 | Y
> 8 | 3 | 21 | X
> 9 | 3 | 20 | X