/ / Wie Datensätze nach Datum und Datum filtern? - SQL, Datenbank, Postgresql

Wie filtere ich Einträge nach Betrag pro Datum? - SQL, Datenbank, PostgreSQL

Ich habe eine Tablette "A", die eine Datumsspalte hat. und das gleiche Datum kann in einigen Datensätzen enthalten sein. Ich versuche, die Datensätze zu filtern, bei denen die Anzahl der Datensätze pro Tag weniger als 5 beträgt. Außerdem behalten Sie alle Felder des Tablets bei.

Ich meine, wenn ich am 11/10/2017 nur 4 Datensätze habe, muss ich alle 4 Datensätze filtern.

Antworten:

1 für die Antwort № 1

So können Sie sie auf Basis der Unterabfrage auswählen. Gruppieren Sie sie in SUB-Query nach dieser Datumsspalte und verwenden Sie dann HAVING mit aggregierter Anzahl, um zu wissen, wie viele in jeder Datumsgruppe vorhanden sind, und wählen Sie dann alle aus, bei denen diese Anzahl unter 5 liegt.

SELECT *
FROM A
WHERE A.date in (SELECT subA.date
FROM A
GROUP BY A.date
HAVING COUNT(*) < 5 );

1 für die Antwort № 2

Die Antwort von Take Care ist gut. Alternativ können Sie eine Analyse- / Windowing-Funktion verwenden. Ich möchte beides bewerten und sehen, welche besser funktioniert.

with cte as (
select *, count(1) over (partition by date) as cnt
from table_a
)
select *
from cte
where cnt < 5