2016-08-05 46 views
1

Ich bin hier fest, Jungs.Return Vales, wenn

Ich habe zwei Tabellen, die jeweils eine Datumsspalte haben. Eine Tabelle verwendet Zeitstempel (2016-08-05 09: 16: 11.000) die andere hat Zeitstempel, aber verwendet es nicht (2016-08-05 00: 00: 00.000)

Ich möchte diese Tabellen und gib das MAX-Datum aus jeder Tabelle zurück, aber NUR, wenn die MAX-Daten übereinstimmen. Wenn eine Spalte ein jüngeres Datum hat, zeigen Sie die Ergebnisse an, wenn beide Spalten ein übereinstimmendes maximales Datum hatten.

Ich versuche MAX und CAST (Zeitstempel zu entfernen), aber ich kann nur das MAX-Datum aus jeder Tabelle zurückziehen. So zeigt es mir nicht die gleichen Daten, wenn beide Tabellen nicht das gleiche maximale Datum haben.

Hier ist mein Beispiel

SELECT A.ID, 
CAST(A.DATE as date), 
CAST(B.DATE as date), 
B.NUMBER, 
A.VALUE, 

FROM TABLE1 A 
JOIN TABLE 2 B 
ON A.ID = B.ID 

Where b.DATE=(SELECT MAX(DATE) 
FROM TABLE B 
WHERE ID = b.ID) 

Where A.DATE=(SELECT MAX(DATE) 
FROM TABLE A 
WHERE ID = b.ID) 

ich meine Ergebnisse wollen, so etwas sein:

ID | (no column name)| (no column name) | Number| Value | 
1 | 2016-08-04  | 2016-08-04  | 42 | 77 | 
2 | 2016-08-04  | 2016-08-04  | 43 | 40 | 
3 | 2016-08-04  | 2016-08-04  | 44 | 42 | 

Aber wenn sie nicht die gleiche max Datum haben, bekomme ich diese

ID | (no column name)| (no column name) | Number| Value | 
1 | 2016-08-04  | 2016-08-05  | 42 | 47 | 
2 | 2016-08-04  | 2016-08-05  | 43 | 43 | 
3 | 2016-08-04  | 2016-08-05  | 44 | 44 | 

Hoffentlich habe ich mich klar gemacht. Jede Hilfe wird geschätzt.

+0

Ich bin mir nicht sicher, ob ich folgen .. Wenn die max Daten nicht gleich sind, was wollen Sie zeigen? – kbball

+0

Immer das maximale Datum anzeigen, wenn sie identisch sind. Wenn nicht identisch, zeigen Sie an, wann jede Spalte zuvor übereinstimmende Daten gefunden hat. – jellyjones89

+0

Sie wollen also die Tabellen bei MAX (Datum) beitreten? – StingyJack

Antwort

2

Hier ist eine Option row_number:

SELECT * 
FROM (
    SELECT A.ID, 
      CAST(A.DATE as date), 
      CAST(B.DATE as date), 
      B.NUMBER, 
      A.VALUE, 
      ROW_NUMBER() OVER (PARTITION BY A.ID ORDER BY A.Date DESC) rn 
    FROM TABLE1 A 
      JOIN TABLE 2 B ON A.ID = B.ID 
         AND CAST(A.DATE as date) = CAST(B.DATE as date) 
) t 
WHERE rn = 1 
+0

Das habe ich gebraucht! Vielen Dank – jellyjones89