Wie vergleichen Sie Daten für mehrere Reihen unter den selben Tisch und den selben account
Wenn alle SQL-gurus könnte mich in die richtige Richtung, das wäre eine große Hilfe. Ich Lerne SQL und möchten einen Bericht zu erstellen, generieren würde das Konto #s unter der gleichen Person-ID, die erstellt wurden, <= 30 Tage von einander, und schließen Sie alle anderen. Alle benötigten Informationen sind in der gleichen Tabelle.
Zum Beispiel dieser code zieht sich eine Liste von Personen ist mit der gleichen personid, die mehr als eine Accountid und Ihrem ERSTELLUNGSDATUM:
select accounttid, creationdate, personid from Table1 where personid in (
select (personid) from Table1 group by personid having COUNT (accountid) > 1)
EXAMPLE RESULT:
accountid creationdate personid
5501624 2013-05-01 101
5501544 2013-05-03 101
5510220 2013-10-24 10337
5504204 2013-06-27 10337
5502332 2013-05-21 1047
5502628 2013-05-28 1047
5508844 2013-10-01 1047
Nicht wissen, wohin Sie gehen von hier aus. Ich möchte dann nehmen Sie diese Accountids und irgendwie vergleichen Creationdates für weniger als oder gleich zu einem 30-Tage-differential aber nur vergleichen, wenn die PersonIDs sind die gleichen.
- Was meinst du genau damit meinst
Account #s .... that were created <= 30 days of each other
? Sagen, es sind 4 Konten (unter der gleichen person), einen ersten Bericht erstellt am2013-01-30
, das zweite an2013-02-28
, thid man bei2013-03-25
und vierter bei2013-04-15
. Wir können sagen, dass Sie alle<=30 days of each other
, die die Datensätze, die Sie erhalten möchten ? Alle, oder die ersten beiden Datensätze aus Januar + Februar, oder vielleicht auch zwei letzten Einträge von März+april ? - Ja, das würde ich brauchen, um alle vier dieser account #s da jeder innerhalb von 30 Tagen von einem anderen. Zum Beispiel in deinem Beispiel sagen, es gibt 5 accounts und der 5. ein wurde geschaffen, auf der 2013-06-01-script sollte die ersten 4 aber weglassen, das Letzte, weil es nicht innerhalb 30 Tage eine andere. Und natürlich diese würden alle unter die gleiche PersonID.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde eine semi-join:
demo --> http://www.sqlfiddle.com/#!2/2be93/2
--- EDIT ---
Auf dem SQL-Server verwenden Sie diese Bedingung:
hier ist eine query, für SQL-Server:
demo: ----> http://www.sqlfiddle.com/#!3/cc922/4
Sich eine Bemerkung, die Ihrer Suchanfrage:
denke eine Weile ..... die Unterabfrage mit
HAVING COUNT
muss die Berechnung einer Anzahl von Aufzeichnungen für jede person - Sie müssen Lesen Sie die gesamte Tabelle (alle Spalten), diese Informationen zu erhalten, weil wir gefragtgive me a number of rows for given person
. Wenn diese person 10.000 Konten, die wir brauchen, Lesen Sie alle von Ihnen zu zählen.Jedoch, wir brauchen nicht diese Informationen, und wir brauchen nicht zu Lesen Sie die gesamte Tabelle. Was wir brauchen, ist die Antwort für diese Frage:
if this person has at least 2 accounts
.Für diese Art von Abfragen, die wir verwenden können, eine
EXISTS
Betreiber:In dieser Abfrage wird von MySql nicht brauchen, um count alle Datensätze und nicht Lesen müssen, eine ganze Tabelle. Es Stoppt das Lesen der Tabelle, wenn es findet ersten Datensatz erfüllt die Kriterien definiert, die von der Unterabfrage innerhalb EXISTS-operator.
BETWEEN dateadd( day, -30, t2.creationdate ) AND dateadd( day, 30, t2.creationdate )
, ich habe eine Abfrage mit einer demo für SQL-Server in meine Antwort. Bitte auch ändern, tag ausmysql
zusql-server
in Frage.Wahrscheinlich können Sie sich die Ergebnis, dass Sie haben sich auf der Grundlage der Bedingung, dass
personid
sollten gleich sein und der Unterschied zwischen zweicreationdate
s ist größer als 30 Tage.Etwas wie: