Ich versuche, die Datensätze aus einer Tabelle in meiner MySQL-Datenbank zu retrive, wobei gilt:SQL-Abfrage Datensätze abzurufen am nächsten zeitzustempeln
- den Zeitstempel ist in der Nähe von einer Variablen I bereitzustellen; und
- durch die Felder gruppiert Keya, KeyB, keyc und KeyD
ich die Variable hart codiert haben, wie unten dies zu testen, aber nicht bekommen kann die Abfrage zu arbeiten.
Mein aktuelles Schema ist:
CREATE TABLE dataHistory (
timestamp datetime NOT NULL,
keyA varchar(10) NOT NULL,
keyB varchar(10) NOT NULL,
keyC varchar(25) NOT NULL,
keyD varchar(10) NOT NULL,
value int NOT NULL,
PRIMARY KEY (timestamp,keyA,keyB,keyC,keyD)
);
INSERT INTO dataHistory
(timestamp, keyA, keyB, keyC, keyD, value)
VALUES
('2016-05-12 04:15:00', 'value1', 'all', 'value2', 'domestic', 96921),
('2016-05-12 04:05:00', 'value1', 'all', 'value2', 'domestic', 96947),
('2016-05-12 04:20:00', 'value1', 'all', 'value2', 'domestic', 96954),
('2016-05-12 04:15:00', 'value1', 'all', 'value3', 'domestic', 2732),
('2016-05-12 04:10:00', 'value1', 'all', 'value3', 'domestic', 2819),
('2016-05-12 04:20:00', 'value1', 'all', 'value3', 'domestic', 2802);
und die Abfrage Ich habe zur Zeit ist:
SELECT e.difference, e.timestamp, e.keyA, e.keyB, e.keyC, e.keyD, e.value
FROM (SELECT TIMESTAMPDIFF(minute, '2016-05-12 04:11:00', d.timestamp) as difference, d.timestamp, d.keyA, d.keyB, d.keyC, d.keyD, d.value
FROM dataHistory d
GROUP BY d.keyA, d.keyB, d.keyC, d.keyD) as e;
Alles, was ich kann zu extrahieren scheint aus den Beispieldaten frühestens zwei sind Aufzeichnungen und nicht die beiden am nächsten zu der Datetime. Was ich erhalten:
difference timestamp keyA keyB keyC keyD value
-10 May, 12 2016 04:05:00 value1 all value2 domestic 96947
-5 May, 12 2016 04:10:00 value1 all value3 domestic 2819
ich sehen erwarte:
timestamp keyA keyB keyC keyD value
May, 12 2016 04:15:00 value1 all value2 domestic 96921
May, 12 2016 04:10:00 value1 all value3 domestic 2819
Jede mögliche Unterstützung geschätzt!
Bitte stellen Sie sicher, dass die DB Sie SQL oder MySQL verwenden. Es scheint, dass Sie MYSQL verwenden. –
Entschuldigung, dies ist eine MYSQL DB. – mousey3209
Ich bin mir über MYSQL nicht sicher, aber in MSSQL müssen Sie zuerst das maximale Datum nach dem Tappen finden und dann self join verwenden. Vielleicht hilft es dir. –