2016-03-23 11 views
0

Ich habe eine Tabelle für ein Anwesenheitssystem (IN/OUT), hier ist ein Beispieldaten.Wählen Sie unterschiedliche Spalte A, wo Spalte B alle erforderlichen Daten enthält?

ID |   Date   | Transaction 
1 | 2016-03-21 06:04:55.000 |  I 
2 | 2016-03-21 06:04:55.000 |  I 
3 | 2016-03-21 06:04:55.000 |  I 
4 | 2016-03-21 06:04:55.000 |  I 
1 | 2016-03-21 17:04:55.000 |  O 
2 | 2016-03-21 17:04:55.000 |  O 
3 | 2016-03-21 17:04:55.000 |  O 
1 | 2016-03-22 06:04:55.000 |  I 
2 | 2016-03-22 06:04:55.000 |  I 
3 | 2016-03-22 06:04:55.000 |  I 
4 | 2016-03-22 06:04:55.000 |  I 
1 | 2016-03-22 17:04:55.000 |  O 
2 | 2016-03-22 17:04:55.000 |  O 
3 | 2016-03-22 17:04:55.000 |  O 
4 | 2016-03-22 17:04:55.000 |  O 
........... 

Was ich will, bekommen alle IDs, die eine IN- und OUT-Transaktion für jeden Tag habe ich geben, so in meinem Beispiel, wenn ich gebe 21. März und 22 I-IDs erhalten 1-3 erst seit 4 doesn Ich habe eine OUT-Transaktion am 21. März. Ich habe versucht, eine IN-Anweisung zu verwenden, funktioniert aber nicht, da sie alle IDs abruft, die an einem beliebigen Datum eine Transaktion haben.

Antwort

0

Try this:

SELECT ID 
FROM mytable 
WHERE CAST([Date] AS Date) IN ('2016-03-21', '2016-03-22') 
GROUP BY ID 
HAVING COUNT(DISTINCT CASE 
         WHEN CAST([Date] AS Date) = '2016-03-21' THEN Transaction 
         END) = 2 
     AND 
     COUNT(DISTINCT CASE 
         WHEN CAST([Date] AS Date) = '2016-03-22' THEN Transaction 
         END) = 2 
+0

perfekt, danke. – crimson589

Verwandte Themen