-1
votes

Sélection de la plus petite valeur dans une colonne par groupe

J'ai une table qui ressemble à ce qui suit, qui a été créée à l'aide du code suivant ...

ID  Time_to_complete ... .....
1        5
2        6
3        7
4        14


1 commentaires

Je ne sais pas si vous dites que vous voulez vouloir filtrer les données ou ajouter la nouvelle valeur dans une autre colonne. De toute façon, les deux seraient triviaux dans SQL Server; Soit en utilisant un CTE / SUBQUERY et ROW_NUMBER ou UTILISEZ ou utilisez Min et la clause sur respectivement. Il y a beaucoup d'exemples sur la manière de faire l'une ou l'autre (j'ai vu au moins 3 questions posées aujourd'hui pour l'ancien ...).


3 Réponses :


1
votes

Je soupçonne que vous devez avoir besoin corrélation sous-requête: xxx

EDIT: Si vous voulez des enregistrements uniques, vous pouvez faire à la place: xxx

pk est votre colonne d'identité qui spécifie une entrée unique dans la table commandes , de sorte que vous pouvez la modifier en conséquence.


2 commentaires

Merci! Une autre question - de sorte que certains des identifiants ont le même minimum, il existe un certain nombre d'identifiants répétés dans la table produite qui ont le même min. Par exemple, si ID 5 a 7 enregistrements et deux dont la variable TIME_TO_COMPLETE est 3 la sortie de la table indique trois lignes pour ID 5. Que puis-je ajouter au code pour afficher uniquement des valeurs uniques. J'ai essayé d'ajouter "distinct" après la déclaration de sélection, mais cela n'a pas fonctionné.


@Greg. . . Dans ce cas, vous pouvez utiliser haut (1) intérieur sous-requête .



1
votes

Regardez-y:

ID          Time_to_complete
----------- ----------------
1           5
2           6
3           7
4           14


0 commentaires

0
votes
Try This 

    DECLARE @myTable AS TABLE (ID INT, Time_to_complete INT);

    INSERT INTO @myTable
    VALUES (1, 5)
    ,      (1, 7)
    ,      (1, 8)
    ,      (2, 23)
    ,      (2, 6)
    ,      (3, 7)
    ,      (4, 16)
    ,      (4, 14);


    SELECT  O.ID, O.Time_to_complete 
    FROM @myTable O
    WHERE o.Time_to_complete  = (Select min(m.Time_to_complete) FROM @myTable m
                                                        Where o.id=m.ID
                                                              );


Result :

ID  Time_to_complete
1   5
2   6
3   7
4   14

0 commentaires