2010-06-07 5 views
2

ma table est de cet ordre. Je voudrais compter les TermID avec ces conditions; S'il est possible veux aussi resultset avec ces en-têtes

- Termid doit avoir un statut proche ou ouvert
- Statut Termid doit tourner à ouvrir (près d'ouvrir)
- Date d'état (état ouvert) doit être plus grand jour que date d'état proche
Exemple de requête SQL

avec mes respects,

 

ID  TermID Status Date 
103990107 103641 Close 28/05/2010 
104000600 103641 Open 31/05/2010 
103980976 106458 Close 26/05/2010 
103990045 106458 Open 27/05/2010 
103939537 106475 Open 18/05/2010 
103908130 117220 Open 13/05/2010 
103929653 117220 Open 13/05/2010 
103999017 117360 Open 31/05/2010 
103834814 117402 Open 05/05/2010 
103993973 117420 Open 28/05/2010 
103849795 119377 Close 05/05/2010 
103955266 119377 Close 21/05/2010 
103995229 119377 Close 29/05/2010 
103979873 119704 Open 25/05/2010 
103832225 119767 Open 04/05/2010 
103925429 123229 Close 15/05/2010 
103986986 123932 Open 27/05/2010 

+1

Qu'est-ce que la base de données ... –

+1

Comment savez-vous quelle date est le plus récent dans '117220' et' 119377' ils sont tous marqués par la même date, et le statut? –

+1

Vous pouvez essayer de reformuler votre question. Vous demandez de compter les identifiants de terminaison, mais vous souhaitez également modifier les statuts et les dates des identifiants de terminaison? Comme ce qui précède est écrit, je ne suis pas sûr de ce que vous voulez faire. Je diviserais la question en différentes parties, au lieu d'essayer d'énoncer tout votre problème à la fois. –

Répondre

0

Je pense que vous vous posez deux questions ici:


1. Comment compter tous les ID de terminaison?

Réponse: Vous utilisez la fonction d'agrégat count(...) dans SQL.

Exemple:

SELECT count(TermID) from <table> 

Cela comptera tous TermIDs dans votre table.


2. Comment puis-je mettre à jour mes dossiers d'avoir une nouvelle date d'état/statut?

Réponse: Utilisez l'instruction UPDATE:

UPDATE <table> 
SET Status = 'Open', <column name> = <value>, ... 
WHERE Staus = 'Closed' 

Remarque: Vous êtes question semble vague, de sorte que le ci-dessus peut ne pas fonctionner correctement. S'il vous plaît adapter à vos cas d'utilisation spécifiques.

+0

c'est à dire, à la suite d'un du IDID va être '106458' car il est d'abord fermé le 26/05/2010 puis ouvert le 27/05/2010. L'état ouvert se produit après l'état de fermeture. Je voudrais obtenir termIDs qui a été fermé et maintenant il est ouvert – qods

0

Essayez celui-ci. Il travaillera dans l'oracle

SELECT TermID, COUNT(*) CNT FROM 
(
SELECT ID,TermID,Status, Date, 
LEAD(Status,1,NULL) OVER (PARTITION BY TermID ORDER BY Date DESC) NEXT_STATUS, 
FROM MYTABLE 
) 
WHERE Status = 'Close' AND NEXT_STATUS = 'Open'; 
+0

comment pourriez-vous écrire cette requête dans la syntaxe tsql – qods

+0

Cela devrait fonctionner dans T-SQL s'il prend en charge les fonctions de fenêtrage dans SQL: 2003. Vous devriez être en mesure de vérifier cela par votre documentation. –