Mam SQL Compact Database, która zawiera tabelę nagłówków pakietów IP. Tabela wygląda następująco:Łączenie SQL Rows
Table: PacketHeaders
ID SrcAddress SrcPort DestAddress DestPort Bytes
1 10.0.25.1 255 10.0.25.50 500 64
2 10.0.25.50 500 10.0.25.1 255 80
3 10.0.25.50 500 10.0.25.1 255 16
4 75.48.0.25 387 74.26.9.40 198 72
5 74.26.9.40 198 75.48.0.25 387 64
6 10.0.25.1 255 10.0.25.50 500 48
Muszę wykonać zapytanie, aby wyświetlić "rozmowy" odbywające się w sieci lokalnej. Pakiety przechodzące z A -> B są częścią tych samych rozmów co pakiety wychodzące z B -> A. Muszę wykonać zapytanie, aby pokazać trwające rozmowy. Zasadniczo co potrzebne jest coś, co wygląda tak:
Returned Query:
SrcAddress SrcPort DestAddress DestPort TotalBytes BytesA->B BytesB->A
10.0.25.1 255 10.0.25.50 500 208 112 96
75.48.0.25 387 74.26.9.40 198 136 72 64
Jak widać muszę zapytania (lub seria zapytań) do uznania, że A-> B jest taka sama jak B-> A i zerwać bajt się liczy. W żadnym wypadku nie jestem guru SQL, ale wszelka pomoc w tym zakresie byłaby bardzo doceniana.
Zakłada się, że każda ścieżka ma odpowiadający jej przeciwny wpis. Więc wszystko musi być ZŁĄCZEM ZEWNĘTRZNYM, co oznacza, że musisz WYKORZYSTAĆ GRUPĘ ISNULL (T1.SrcAddress, T2.DestAddress), itp. – MatBailie
Edycja usunęła zewnętrzną grupę GROUP BY itp.To nadal działa tylko wtedy, gdy każdy pakiet odpowiada pakietowi idącemu w przeciwnym kierunku. (Ale jeśli ten warunek jest prawdziwy, działa, myślę ...) – MatBailie
Działa to tylko w przypadku rozmów dwukierunkowych. Nie wszystkie rozmowy będą dwukierunkowe. Jak mogę zmodyfikować sprzężenie, aby to złagodzić? – lumberjack4