bugfix> sql-server > 投稿

最初のクエリの結果、次の形式のデータがあります。 次に、条件付きの2番目のクエリを追加する必要があります。これは私にとって難しいことであり、誰かがこれを手伝ってくれるかもしれません。

条件は次のとおりです。

の場合タイプのために顧客最高の行製品番号ですY、次に、特定の顧客のすべての行を取得します(バツその後、非を取ります。

したがって、product_idが最も高い顧客行ごとに何らかの方法で選択し、その行タイプがYであるかどうかを確認してから、結果について、指定された顧客データのすべてまたは非を取得する必要があります。

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

回答 2 件
  • 使用する FIRST_VALUE() ウィンドウ関数:

    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'
    
    

    デモをご覧ください。
    結果:

    > 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  
    
    

あなたの答え