2016-06-03 6 views
0

Ich habe die folgende Tabelle.Wie kann ich eine WHERE BETWEEN-Klausel in einer INSERT-Abfrage verwenden?

Ohne zu sehr ins Detail zu gehen, protokolliert diese Tabelle alle Anfragen und Eindrücke von Anzeigen auf elektronischen Bildschirmen im ganzen Land. Diese Tabelle wird auch zur Erstellung von Berichten verwendet und besteht aus + - 50 Millionen Datensätzen.

Derzeit werden die Berichte nach dem Zeitstempel created_at gefiltert. Sie können sich vorstellen, dass die Abfrage mit + - 50 Millionen Datensätzen langsam wird, sogar mit einem Index für die Spalte created_at. Die Berichte werden generiert, indem Sie auswählen, zwischen welchen Daten die Daten auf der Benutzeroberfläche des Systems angefordert werden sollen.

Die Spalten "Jahr", "Monat" und "Tag" sind neue Spalten, die ich hinzugefügt habe, um die Berichterstellung effizienter zu gestalten. Anstatt das Datum zu indexieren, möchte ich, dass das System alle separaten Werte für Jahr, Monat und Tag indiziert.

Die neu hinzugefügten Spalten sind noch leer. Ich möchte eine Abfrage ausführen, die einen Wert einfügt, bei dem die created_at-Spalte zwischen zwei Datumsangaben liegt. Zum Beispiel:

INSERT INTO ad (year) VALUES (2016) WHERE created_at BETWEEN '2016-01-01 00:00:00' AND '2016-12-31 23:59:59'; 

Dies funktioniert natürlich nicht. Ich kann anscheinend nichts im Internet finden, wo eine INSERT-Anweisung eine WHERE BETWEEN-Klausel verwendet. Ich habe auch versucht, mithilfe von Unterabfragen und der WITH-Klausel eine Reihe von Jahren zwischen 2012 und 2020 mit generate_series zu generieren. Es hat alles nicht geklappt.

+2

'INSERT' fügt neue Zeilen, möchten Sie UPDATE' vorhandenen Zeilen zu'. – klin

Antwort

4

Sie möchten keine neuen Zeilen einfügen, Sie sollten Ihre Tabelle aktualisieren.

UPDATE table_name 
SET column1=value1,column2=value2,... 
WHERE column_name BETWEEN value1 AND value2; 

Andernfalls Sie 100 milions Reihen haben werden;)

+0

Ah Scheiße, ich habe es gerade bemerkt. Ich habe immer gedacht, dass du in bestehende Zeilen einfügen kannst. Tatsache ist, UPDATE ist sehr langsam über 50 Millionen Datensätze, aber dafür werde ich eine andere Lösung finden. Danke für deine Antwort. –

+0

Sicher, aber einfügen Anweisung ist nicht der richtige Ansatz und Sie müssen Zeilen aktualisieren. Für die Leistung könnten Sie Ihre Tabelle in mehrere Untertabellen aufteilen, wenn dies von Ihrer logischen db-Struktur erlaubt wird – lubilis

Verwandte Themen