-1
votes

Rangées de groupe avec une valeur en fonction de la condition d'une colonne différente SQL

J'ai une liste de lignes que j'ai besoin de grouper par une clé et pour chaque groupe, la valeur de deux colonnes dépend d'une condition d'une colonne différente.

Par exemple Entrez la description de l'image ici

devrait devenir Entrez la description de l'image ici

Cela signifie que pour la valeur du Col 5 prenne celle où Col 4 est le plus bas et que le Col 7 prend la valeur où le col 6 est le plus élevé.

une idée de la manière de réaliser ce résultat?


2 commentaires

Je ne suis pas sûr de disposer de suffisamment d'informations pour répondre ici. Comment savons-nous quelle valeur à prendre?


Comme expliqué. La valeur du col 5 devrait être la valeur sur le col 5 où le col 4 est le plus bas et pour le col 7 de la valeur du col 7 où le col 6 est le plus élevé. L'image montre que je prends le PI01041635) car la valeur la plus faible du col 4 est 20190601 (le plus bas du Col 4) et pour le Col 7 I Pick PI0113027 car le Col 6 est 20200303 (le plus élevé sur le Col 6)


4 Réponses :


2
votes

Ceci suppose que votre groupe est déterminé par votre colonne clé

;with r as (
    select Key, Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8,
    row_number() over(partition by key order by Col4) as c4,
    row_number() over(partition by key order by Col6 desc) as C6
)
select distinct r1.Key, r1.Col1, r1.Col2, r1.Col3, 
    r2.col4, r2.col5, 
    r3.col6, r3.col7, 
    r1.col8
from r r1
join r r2 on r2.key=r1.key and r2.c4=1
join r r3 on r3.key=r1.key and r3.c6=1


1 commentaires

Vous avez besoin d'un distinct de sorte qu'il retournera 1 rangée au lieu de 2, et vous avez besoin d'un à partir du tableau dans le premier Sélectionnez la déclaration . Très intelligent BTW.



0
votes

Votre jeu de données est difficile à utiliser car vous n'avez pas de clé unique sur chaque enregistrement. Avoir une clé unique simplifierait beaucoup la requête. Cela fait ce que vous demandez: xxx

qui renvoie ces données: xxx


0 commentaires

0
votes

Vous pouvez utiliser first_value last_value xxx


0 commentaires

0
votes

Vous pouvez le faire avec des fonctions de fenêtre telles que min () code> et first_value () code>: xxx pré>

Voir le Demo .
Résultats: P>

> Key | Col1 | Col2 | Col3 | Col4     | Col5      | Col6     | Col7      | Col8    
> :-- | :--- | :--- | ---: | :------- | :-------- | :------- | :-------- | :-------
> A   | XXX  | AAA  |    5 | 20190601 | PI0104163 | 20200303 | PI0113027 | 20190531


0 commentaires