2017-01-24 3 views
0

Ich verwende die folgende Einfügeabfrage, um einen Vergleich zwischen zwei Tabellen zu erstellen, die die Daten zu dem Beitreten verwenden.SQLITE Join on Datum = Datum + x

INSERT INTO Comp_Table (Date, CKROne, CKRTwo, ChangeOne, ChangeTwo, State) 
SELECT BaseTbl.Date, BaseTbl.CKR, CompTbl.CKR, BaseTbl.Change, CompTbl.Change, 
CASE 
WHEN BaseTbl.Change > 0 AND CompTbl.Change > 0 THEN 'positive' 
WHEN BaseTbl.Change < 0 AND CompTbl.Change < 0 THEN 'positive' 
ELSE 'inversely' 
END AS 'Correlation' 
FROM BaseTbl 
JOIN CompTbl ON BaseTbl.Date = CompTbl.Date; 

Das funktioniert gut. Ich würde jedoch gerne mit einer Verzögerung an den Tabellen teilnehmen können. Wie im Fall kann der Benutzer definieren, ob er genau nach Datum suchen möchte oder ob er ein Datum des Auftretens plus eine Zahl verwenden und den Wert aus dem letzten Datum zum Vergleich mit der Zahl des vorherigen Datums zurückgeben möchte. Pseudo-Code Beispiel:

Benutzer setzt die Variable = 0 dann

Join ComTbl On BaseTbl.Date = CompTbl.Date + 0; 

Benutzer setzt die Variable = 7 dann

Join CompTbl On BaseTbl.Date = CompTbl.Date + 7; 
(joins 2012-01-01 from BaseTbl to 2012-01-08 from CompTbl) 

Ich versuchte Tage hinzufügen, wie Sie es in einer Where-Klausel ("+7 Tag '), aber das hat nicht funktioniert. Ich versuchte auch, eine Where-Klausel mit BaseTbl.Date = CompTbl.Date '+ 7 day' zu verwenden, aber das gab auch einen 0-Wert zurück. Wie kann dies in SQLite erreicht werden?

Antwort

1

Ich glaube, Sie die DATE() Funktion können Sie die WHERE Klausel Sie wollen bauen: Format

INSERT INTO ... 
SELECT ... 
FROM BaseTbl 
INNER JOIN ComTbl 
    ON BaseTbl.Date = DATE(CompTbl.Date, '7 days') 
+0

Wenn das Datum eigentlich 'yyyy-mm-dd'. –

+0

Das hat es getan. Vielen Dank! –