2016-08-05 40 views
1

Ich habe zwei Tabellen:Wie Gruppe durch ein Attribut und nach Datum geordnet

Medics

CREATE TABLE "medic" (
    "id" BIGINT NOT NULL, 
    "name" CHARACTER VARYING(255) NOT NULL, 
    PRIMARY KEY ("id") 

);

Kommentare

CREATE TABLE IF NOT EXISTS "comment" (
    "id" BIGINT NOT NULL, 
    "medic_id" BIGINT NOT NULL, 
    "comment" CHARACTER VARYING(1024) NOT NULL, 
    "created_at" TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT now(), 
    CONSTRAINT pk_comment PRIMARY KEY (id), 
    CONSTRAINT fk_comment_medic FOREIGN KEY (medic_id) 
    REFERENCES medic(id) ON UPDATE NO ACTION ON DELETE NO ACTION 
); 

Jetzt möchte ich medic_id, name, comments_count und alle ordered by created_at

hier bekommen, was ich bisher ausprobiert habe:

SELECT m.id, m.name, COUNT(c.id) 
FROM COMMENT AS c 
JOIN medic AS m ON m.id = c.medic_id 
GROUP BY m.id, m.name, c.created_at 
ORDER BY c.created_at DESC 

Aber offensichtlich kann dies nicht funktionieren weil es keinen Sinn ergibt, nach Datum zu sortieren, obwohl ich es tun muss, wenn ich nach Datum bestellen möchte.

Eine weitere Appraach war mit Fensterfunktionen zu arbeiten. Insbesondere rank() over (partition by m.id order by c.created_at desc). Aber in diesem Fall verliere ich die Reihenfolge über alle Datensätze.

Hier sind einige SQLFiddle.

ich Postgres bin mit 9,3

+0

Die Frage einer exemplarischen gewünschten Ausgangs klarer sein würde. – klin

Antwort

0

Ich vermute, Sie über die neueste Kommentar Datum von bestellen möchten:

SELECT m.id, m.name, COUNT(c.id) 
FROM COMMENT c JOIN 
    medic m 
    ON m.id = c.medic_id 
GROUP BY m.id, m.name 
ORDER BY MAX(c.created_at) DESC;