2017-10-05 1 views
1

J'ai une table avec un Nr, DateTime, StatutSQL Conserver uniquement les enregistrements avec le temps après

Si le statut réservé à 1 est réservé si l'état est 0.

Je dois obtenir une liste quotidienne où Je veux voir si c'était complet le jour mais pas y retourner.

J'ai besoin de chercher état 1, et après cette période s'il n'y a pas un statut 0.

J'ai essayé.

SELECT A1.Number, A1.Time TimeOut, A2.Time TimeIn 
FROM dbo.Items A1 LEFT JOIN dbo.Items A2 ON A1.Number = A2.Number 
    AND A2.Time !< A1.Time 
    AND A1.State = 1 
    AND A2.State = 0 
WHERE A2.Time IS NULL 

La sortie doit être:

Nr : TimeOut    : TimeIn : 

10 2017/09/15 12:00  NULL 
15 2017/09/15 15:45  NULL 

Les données sont:

NR : Status : Date 
5  0  2017/09/15 09:00 
10  0  2017/09/15 12:00 
5  1  2017/09/15 13:00 
15  0  2017/09/15 15:45 
+0

Salut, j'utilise le serveur MS SQL 2008 – Danie

+0

ajouter alos a prope r échantillon de données .. – scaisEdge

+0

Ajout des exemples de données – Danie

Répondre

0

Vous pouvez sélectionner la ligne où NR ont pas la date de l'état OUT par exemple:

select NR, Date as TimeOut, NULL as TimeIn 
FROM dbo.Alarms 
    where (NR) NOT in (
     select a.NR 
     from dbo.Alarms a 
     INNER JOIN (
     select NR, Date 
     from dbo.Alarms 
     where status = 1 
     ) t on t.NR = a.NR and Date(t.date) = date(a.date) 
    ) 
+0

Je reçois la colonne non valide sur NR et Date – Danie

+0

J'ai ajouté DE dbo.Alarms après Timein, cela fonctionne, merci pour votre aide. S'il vous plaît modifier votre réponse et je vais l'accepter comme droit – Danie

+0

Ops ... @Danie beaucoup .. merci .. réponse mise à jour avec la bonne de la clause – scaisEdge