Begrenzte Listendarstellung

das funktioniert jetzt, oder?

Falls ja: in Klammern setzen, ein select * (oder die Spalten, die Du haben willst) davor und ein ALIAS where platz <= 5 dahinter.

Danke, Danke, Danke, es funktioniert wie gewünscht ,

EDV weckt Begehrlichkeiten
Ist es möglich diese 5 Einzelergebnisse zu einem Manschaftsergebnis zu summieren und sortieren

Es fehlt formal ein Group by “results”, geht vermutlich trotzdem nur, weil postgres schlau ist.
Das Group By … selbst ist insgesamt eigentlich auch überflüssig.

@ pogomips, hast recht results war hier nur Ersatz für sum() funktion

Das GROUP BY ist falsch und wird einen Fehler liefern - ist aber auch unnötig mit einer Window Funktion.

Du musst nur die aktuelle Abfrage in eine Sub-Query packen, dann klappt das:

select name, vorname, verein, ergebnis, platz
from (
  select shooters.surname as Name,
         shooters.forename as Vorname,
         shooters.club as Verein,
         journal.results as Ergebnis,
         ROW_NUMBER() OVER (partition by shooters.club ORDER BY journal.results desc) as Platz
  from home.journal
    join home.shooters ON journal.shooters_id = shooters.shooters_id
  where journal.event_status = 'finished'
    and journal.shooters_id > 0
) t
where platz <= 5
order by Verein, Ergebnis desc;

Ich habe Deine veralteten impliziten Joins gleich durch einen modernen expliziten JOIN Operator ersetzt.

Die Bedingung “and journal.shooters_id > 0” sieht etwas merkwürdig aus. Gibt es denn überhaupt Shooter mit der ID=0? Wenn, nicht, dass ist das überflüssig da der JOIN solche Datensätze ja eliminieren würde. Sieht schwer danach aus, als würde da ein Foreign key fehlen.

@castorp, das mit dem “veraltet” kommt auf den Punkt, ich hab seit 25 Jahren nichts mehr mit SQL zu tun und das Veraltete war mir eben noch etwas in Erinnerung. Versuche nun da Bedarf entstanden ist mich wieder etwas einzulesen und hoffe dass ich mich vertrauensvoll an euch wenden darf.

Deshalb mal Danke für eure schnelle Hilfe

Gruß Simar

Der explizite JOIN Operator wurde vor 29 Jahren im SQL Standard (“SQL:89”) eingeführt :wink:

ROFL :wink:

Weiß ich wohl, aber ich war und bin kein Entwickler sondern nur ein ahnungsloser Nutzer der damals und heute wieder, Auswertungen braucht. So gings für mich eben einfacher. Ich wußte damals nicht mal wie man UNIX SQL schreibt, aber meine Kalkulationen haben auf den, Pfennig damals, gestimmt. :sunglasses:

Ich wollte es nur erwähnen, weil ich immer wieder Leute treffe, die denken das der JOIN Operator was “ganz neues” wäre.
Einige verbreitete Datenbanksysteme haben das auch sehr lange nicht unterstützt (Oracle, SQL Server). Und in der Oracle Community gibt es noch einige Benutzer die sich immer noch weigern das zu verwenden weil es ganz am Anfang als Oracle das vor rund 15 Jahren eingeführt hat ein paar Bugs mit der Syntax gab.

Leider muss ich auch Postgres einen kleinen Vorwurf machen, weil in der Dokumentation praktisch alle Beispiele implizite joins verwenden und nicht den expliziten JOIN Operator.

Die impliziten joins haben das Problem, dass sie leicht in einem ungewollten cross join resultieren weil es kein Syntaxfehler ist die join Bedingung zu vergessen. Deswegen empfehle ich immer wo es nur geht, den “modernen” JOIN Operator zu verwenden.

FULL ack! (letzter Absatz)

Fri Oct 05 2018 19:52:14 GMT+0200 (CEST) <<< ist das Format von date_time in meiner Tabelle
Frage: ist es möglich dieses Format zu wandeln damit ich mit TT.MM.JJJJ alles vom 05.10.2018 auslesen kann, oder geht das nur mit der between … and Bedingung

vermutlich hast da also ein timestamptz drin stehen, select spalte::date liefert dir das reine Datum, where spalte::date=‘2018-10-05’ könntest Du es prüfen, oder via to_char(spalte, ‘tt.mm.yyyy’) auf Dein Format bringen.

Bitte schaue Dir die passenden Funktionen an:

https://www.postgresql.org/docs/10/static/functions-formatting.html
https://www.postgresql.org/docs/10/static/functions-datetime.html

OK, kein Format, hab ich mich falsch ausgedrückt. Aber dann sollte ich doch geziehlt auf "Oct 05 2018 " mit einem Select zugreifen können?

Ja natürlich:

where date_time::date = date '2018-10-05'

Das date_time::date “verwandelt” den Timestamp (Datum und Uhrzeit) in ein “Datum” (ohne Uhrzeit) um.

ERROR: FEHLER: ungültige Eingabesyntax für Typ date: »Tue Mar 06 2018 23:01:10 GMT+0100 (CET)« SQL-Status: 22007

ich glaube der erkennt das >>> ‘2018-10-05’ nicht, sieht farblich aus wie auskommentiert

Das “date ‘2018-10-05’” ist korrekt, aber offensichtlich der cast zu einem DATE Wert nicht

Das bedeutet, dass Deine date_time Spalte kein timestamp ist, sondern ein text oder varchar - sehr, sehr schlechte Idee.

die Idee ist nicht von mir, die Datenbank wurde mir so zu Verfügung gestellt.
Alternativ gibt es noch eine andere Tabelle mit einer “beg_timestamp” Spalte aber da komm ich auch nicht weiter. :frowning:

date_time character varying(100)
beg_timestamp bigint