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.
'INSERT' fügt neue Zeilen, möchten Sie UPDATE' vorhandenen Zeilen zu'. – klin