J'ai besoin d'aide avec un Select.
Ce qui suit est une tentative de vous donner un exemple des données.
Nombre: 1 | Date: 2014-05-01 | Code client: 001 | Statut: P | Séquence: 0 |
Nombre: 1 | Date: 2014-05-01 | Code client: 001 | Statut: X | Séquence: 1 |
- Requête SQL où filter de clause basé sur une autre valeur de colonne
- Comment returnner l'logging le plus récent
- SQL lorsque newValue else previousValue
- Condition basée sur la clause où la procédure stockée SQL Server
- SQL Sélectionnez toutes les inputs des deux derniers mois
Numéro: 2 | Date: 2014-06-30 | Code client: 005 | Statut: X | Séquence: 0 |
Numéro: 2 | Date: 2014-06-30 | Code client: 005 | Statut: Z | Séquence: 1 |
Numéro: 2 | Date: 2014-06-30 | Code client: 005 | Statut: A | Séquence: 2 |
J'ai besoin d'un Select qui me donne tous les loggings avec la "Séquence" la plus élevée parmi ceux avec le même "Nombre"
La sortie désirée returnnera les lignes avec le Nombre 1 / Séquence 1 et Numéro 2 / Séquence 4
J'ai réussi à le faire avec l'utilisation d'une table temporaire mais c'est très lent.
Pouvez-vous m'aider?
Merci d'avance
SELECT * FROM table t WHERE NOT EXISTS ( SELECT 'a' FROM table t2 WHERE t2.number = t.number AND t2.sequence > t.sequence )
Utilisez ROW_NUMBER()
pour cela:
;WITH TestTable(Number, Date, ClientCode, Status, Sequence) AS( SELECT 1, '2014-05-01', '001', 'P', 0 UNION ALL SELECT 1, '2014-05-01', '001', 'X', 1 UNION ALL SELECT 2, '2014-06-30', '005', 'X', 0 UNION ALL SELECT 2, '2014-06-30', '005', 'P', 1 UNION ALL SELECT 2, '2014-06-30', '005', 'X', 2 UNION ALL SELECT 10, '2015-01-01', '555', 'P', 0 UNION ALL SELECT 15, '2015-02-08', '666', 'P', 0 UNION ALL SELECT 15, '2015-02-08', '666', 'C', 1 UNION ALL SELECT 15, '2015-02-08', '666', 'T', 2 UNION ALL SELECT 15, '2015-02-08', '666', 'X', 3 UNION ALL SELECT 15, '2015-02-08', '666', 'X', 4 ) SELECT Number, Date, ClientCode, Status, Sequence FROM( SELECT *, RN = ROW_NUMBER() OVER(PARTITION BY Number ORDER BY Sequence DESC) FROM TestTable )t WHERE RN = 1
RÉSULTAT
Number Date ClientCode Status Sequence ----------- ---------- ---------- ------ ----------- 1 2014-05-01 001 X 1 2 2014-06-30 005 X 2 10 2015-01-01 555 P 0 15 2015-02-08 666 X 4
Utilisez une sous-requête corrélée pour find la valeur de séquence maximale de chaque numéro:
SELECT * FROM TableName t1 where sequence = (select max(sequence) from tablename t2 where t1.number = t2.number)
Va renvoyer les deux lignes si un nombre avec deux mêmes lignes de séquence max.
Essaye ça..
With x as (select number, max(sequence)from yourfile group by number) select y.number,y.sequence,y.clientcode from x, yourfile y where x.number=y.number and y.sequence=x.sequence
Essaye ça:
SELECT Number, Date, ClientCode, Status, Max( Sequence) FROM TableName Group by ClientCode;
Il suffit de grouper par code client et d'utiliser la fonction d'agrégat max sur la séquence pour get la valeur associée au code de séquence max.