2017-06-02 1 views
-1

Gegeben eine Reihe von Daten mit date_created gespeichert wie 2017-04-13 23:29:52, wie würde ich eine SQL-Abfrage erstellen, um alle Elemente auszuwählen, die innerhalb der letzten 3 Stunden erstellt wurden?SQL Query von erstellt vor 3 Stunden

ich ursprünglich dachte, so etwas zu tun:

SELECT 
    *, 
    MAX(date_created) 
FROM items 
GROUP BY date_created 

aber das wäre nicht genau das, was ich will. Ich bin mir nicht sicher, wie ich das anstellen soll.

+1

genau vor 3 Stunden? vor mehr als 3 Stunden? – WheatBeak

+1

Haben Sie eine 'WHERE'-Klausel in Ihrer Abfrage versucht? Sehen Sie sich die Funktion DATEDIFF an. –

+0

Sie können einfach Ihre_Spaltenname - Intervall 3 Stunden –

Antwort

2

Verwenden NOW() und INTERVAL in Ihrer WHERE Klausel

SELECT * FROM items WHERE date_created <= NOW() - INTERVAL 180 minute AND date_created >= NOW() - INTERVAL 210 minute 
+0

Definitiv die richtige Idee, obwohl ich vorschlagen könnte "INTERVAL 3 Stunde" als einfacher zu folgen. –

+0

Yeah nur persönliche Vorliebe Ich hätte lieber ganze Minuten als ein Float für Stunden. Kein besonderer Grund warum, nur ich haha. – WheatBeak

+0

Obwohl "3,5 Stunden" aus irgendeinem Grund nicht so präzise zu sein scheinen wie "210 Minuten". Zum Beispiel ist meine Serverzeit gerade "15: 01", aber wenn ich 3,5 Stunden verwende, gibt es immer noch einen Eintrag mit der Zeit "11: 28". Ich empfehle definitiv Minuten zu verwenden, wenn Präzision gewünscht wird. Vielleicht habe ich das auch so gemacht. – WheatBeak

1

Dieses verwendet CURDATE, CURDATE und DATE_ADD:

SELECT * 
FROM items 
WHERE DATE(date_created) = CURDATE() 
AND TIME(date_created) BETWEEN CURTIME() AND DATE_ADD(CURTIME(), INTERVAL -3 HOUR) 
0
select * from items where 
extract(hours from age(current_timestamp, date_created))>=3; 

Extract Stichwort würde Stunden Differenz aus aktuellen Zeitstempel extrahieren und zurück nur das ist größer als oder gleich 3.