Ich versuche, Zeilen aus meiner Abfrage aufgrund der folgenden Bedingung auszuschließen.DATEDIFF basierend auf ID in WHERE-Klausel
- Calculate the time difference between EID of 33 and 49
- If the total seconds is less than 35 exclude them from query
SELECT c1.* FROM CTE2 C2
INNER JOIN CTE C1
ON C2.ID = C1.ID
AND c1.EID IN (33,49)
ORDER BY C1.ID, C1.DateTime
Meine Daten können mehrere Zeilen für die gleiche ID mit duplizierten EID=33
enthalten, aber es wird immer ein EID=49
haben. Also interessiert mich last record
für ID minus previous
Zeile für die gleiche ID. Wenn es weniger als 35
Sekunden ist, schließen Sie diese ID
aus den Ergebnissen aus.
Ich habe versucht, mit Lag
Funktion und das Hinzufügen eines AND
Anweisung der Abfrage oben
AND DATEDIFF(SECOND, DateTime, LAG(datetime) OVER (ORDER BY id, datetime)) < 35
Aber ich erhalte den folgenden Fehler:
Windowed functions can only appear in the SELECT or ORDER BY clauses.
Ich versuche haben einen anderen Ansatz:
;with cte AS
(
SELECT *,ROW_NUMBER() OVER(PARTITION BY id ORDER BY DateTime) AS RN
FROM @cte WHERE eid IN (33,49)
)
SELECT a.*, DATEDIFF(SECOND,a.datetime, b.DateTime) AS diff
FROM cte a
LEFT JOIN cte b
ON a.id = b.id
AND a.RN = b.RN -1
AND DATEDIFF(second, a.DateTime, b.DateTime) < 35
Aber das gibt mir immer noch die correc t Daten.
Hier ist ein Beispiel Datensätze.
Auf dieser Basis zeichnet sie nur ID=12345
und ID=54321
ausschließen zurückkehren sollte, da die Differenz nur 12 Sekunden ist.
Irgendwelche Vorschläge?
UPDATE
Ich bin ein SQLFIDDLE erstellen nicht in der Lage. Hier ist ein SCRIPT zum Erstellen einer TEMP-Tabelle.
DECLARE @cte as table
(
ID Char (5),
[DateTime] DateTime,
EID integer
)
INSERT INTO @cte
VALUES
(N'12345', N'2016-03-15 13:14:57.000', 1),
(N'12345', N'2016-03-15 13:15:01.000', 2),
(N'12345', N'2016-03-15 13:15:12.000', 5),
(N'12345', N'2016-03-15 13:15:13.000', 12),
(N'12345', N'2016-03-15 13:15:13.000', 13),
(N'12345', N'2016-03-15 13:15:27.000', 16),
(N'12345', N'2016-03-15 13:15:27.000', 22),
(N'12345', N'2016-03-15 13:15:27.000', 23),
(N'12345', N'2016-03-15 13:15:39.000', 26),
(N'12345', N'2016-03-15 13:15:39.000', 32),
(N'12345', N'2016-03-15 13:15:42.000', 52),
(N'12345', N'2016-03-15 13:15:42.000', 33),
(N'12345', N'2016-03-15 13:15:52.000', 48),
(N'12345', N'2016-03-15 13:16:37.000', 33),
(N'12345', N'2016-03-15 13:17:13.000', 35),
(N'12345', N'2016-03-15 13:17:13.000', 49),
(N'54321', N'2016-03-24 20:55:30.000', 1),
(N'54321', N'2016-03-24 20:55:30.000', 50),
(N'54321', N'2016-03-24 20:55:32.000', 2),
(N'54321', N'2016-03-24 20:56:30.000', 5),
(N'54321', N'2016-03-24 20:56:30.000', 12),
(N'54321', N'2016-03-24 20:56:30.000', 13),
(N'54321', N'2016-03-24 20:57:44.000', 16),
(N'54321', N'2016-03-24 20:57:44.000', 22),
(N'54321', N'2016-03-24 20:57:44.000', 23),
(N'54321', N'2016-03-24 20:57:56.000', 26),
(N'54321', N'2016-03-24 20:57:56.000', 32),
(N'54321', N'2016-03-24 20:57:59.000', 52),
(N'54321', N'2016-03-24 20:58:54.000', 33),
(N'54321', N'2016-03-24 20:59:06.000', 35),
(N'54321', N'2016-03-24 20:59:06.000', 49)
Bitte legen Sie eine Geige für uns zu arbeiten mit. Danke –
Ich tue es immer, und ich habe es versucht, aber die Seite antwortet überhaupt nicht. – smr5
Ich verstehe. Fügen Sie einfach das 'CREATE'- und' INSERT'-Skript als Teil der Frage ein. –