2016-05-31 10 views
2

Sagen wir, ich habe zwei Tabellen. Eine ist eine Tabelle mit Informationen über Kundendienstanfragen, die Informationen über den Kunden und den Zeitpunkt der Anfrage enthalten. Die Kundendaten (in diesem Fall die ID) werden für alle zukünftigen Anfragen gespeichert.Suche nach einem Mindestdatum vor einem anderen Datum

CUST_ID  INQUIRY_ID  INQUIRY_DATE 
001   34    2015-05-03 08:15 
001   36    2015-05-05 13:12 
002   39    2015-05-10 18:43 
003   42    2015-05-12 14:58 
003   46    2015-05-14 07:27 
001   50    2015-05-18 19:06 
003   55    2015-05-20 11:40 

Die andere Tabelle enthält Informationen zu den Auflösungsterminen für alle Kundenanfragen.

CUST_ID  RESOLVED_DATE 
001   2015-05-06 12:54 
002   2015-05-11 08:09 
003   2015-05-14 19:37 
001   2015-05-19 16:12 
003   2015-05-22 08:40 

Die Auflösungstabelle als die CUST_ID keinen Schlüssel haben andere auf die Anfrage Tabelle zu verknüpfen, so um die Zeit, um Auflösung zu berechnen, möchte ich für jede der Mindest Anfrage Zeitpunkt vor der Auflösung bestimmen Auflösungsdatum. Die resultierende Tabelle würde wie folgt aussehen:

CUST_ID  FIRST_INQUIRY  RESOLVED_DT 
001   2015-05-03 08:15  2015-05-06 12:54 
001   2015-05-18 19:06  2015-05-19 16:12 
002   2015-05-10 18:43  2015-05-11 08:09 
003   2015-05-12 14:58  2015-05-14 19:37 
003   2015-05-20 11:40  2015-05-22 08:40 

Zuerst ging ich nur mit min (Fall, wenn INQUIRY_DATE < RESOLVED_DT), aber für Leute wie Kunden 001 und 003, die mehrere Anfragen über verschiedene Termine haben, würde die Abfrage nur Geben Sie das erste Anfragedatum zurück, nicht das erste seit der letzten Anfrage. Weiß jemand, wie man das macht? Ich benutze Netezza.

+0

Der Weg zum geringsten Widerstand wäre, der Auflösungstabelle einen Schlüssel zu geben. –

+0

Einverstanden, aber leider habe ich diese Kraft nicht. – user3642531

+0

Ich gab Ihnen eine Antwort unten. Bitte lassen Sie mich wissen, wenn dies Ihren Bedürfnissen entspricht. –

Antwort

0

Eine Option besteht darin, für jede Tabelle eine Unterabfrage zu erstellen (inquries und resolutions), die die Transaktion für jede CUST_ID unter Verwendung des Datums nummeriert. Dann können die zwei Unterabfragen unter Verwendung dieser geordneten Indexspalte zusammen mit der CUST_ID verbunden werden.

Ich habe auch die INQUIRY_ID in der 10 Tabelle verwendet, um eine Krawatte zu brechen, sollte es vorkommen. Es gibt keine Möglichkeit, einen Gleichstand in der Tabelle resolutions für einen bestimmten Kunden und ein bestimmtes Datum zu brechen, basierend auf den Daten, die Sie uns gezeigt haben.

SELECT t1.CUST_ID, t1.INQUIRY_ID AS FIRST_INQUIRY, t2.RESOLVED_DATE AS RESOLVED_DT 
FROM 
(
    SELECT CUST_ID, INQUIRY_ID, INQUIRY_DATE, 
     (SELECT COUNT(*) + 1 
     FROM inquiries 
     WHERE CUST_ID = t.CUST_ID AND INQUIRY_DATE <= t.INQUIRY_DATE 
      AND INQUIRY_ID < t.INQUIRY_ID) AS index 
    FROM inquiries AS t 
) AS t1 
INNER JOIN 
(
    SELECT CUST_ID, RESOLVED_DATE, 
     (SELECT COUNT(*) + 1 
     FROM resolutions 
     WHERE CUST_ID = t.CUST_ID AND RESOLVED_DATE < t.RESOLVED_DATE) AS index 
    FROM resolutions t 
) AS t2 
    ON t1.CUST_ID = t2.CUST_ID AND t1.index = t2.index 

Hier sind, was die Unterabfrage Tabellen wie folgt aussehen:

Anfragen:

CUST_ID  INQUIRY_ID  INQUIRY_DATE   index 
001   34    2015-05-03 08:15  1 
001   36    2015-05-05 13:12  2 
002   39    2015-05-10 18:43  1 
003   42    2015-05-12 14:58  1 
003   46    2015-05-14 07:27  2 
001   50    2015-05-18 19:06  3 
003   55    2015-05-20 11:40  3 

Auflösungen:

CUST_ID  RESOLVED_DATE  index 
001   2015-05-06 12:54  1 
002   2015-05-11 08:09  1 
003   2015-05-14 19:37  1 
001   2015-05-19 16:12  2 
003   2015-05-22 08:40  2 

Beachten Sie, dass diese Lösung nicht robust ist, m Senden von Daten, z.B. Es gibt eine Anfrage, die nicht abgeschlossen wurde, oder der Beschluss wurde nie aufgezeichnet.

+0

Danke für den Kommentar, ich werde es ausprobieren. Die fehlenden Daten sind kein Problem, ich habe nur mit bestehenden Auflösungsterminen zu tun. – user3642531

+0

Wenn das ein Kommentar ist, dann kann ich mir die Länge einer Antwort nicht vorstellen :-) –

+0

Ha, es ist ein bisschen länger als ein Kommentar, das stimmt, entschuldige mich. Ich schaue wirklich den Code zum ersten Mal heute, würde dies nicht die 5/14 Anfrage an die 5/22 Auflösung für den Kunden 003 verknüpfen? (Die 5/20 Anfrage sollte stattdessen verknüpft werden). – user3642531

Verwandte Themen