2016-11-18 7 views
-1

Ich habe diese Tabelle und Datensätze:MySQL Sortierung nach 2 Datensätze

Table: advertiser 

id | company_id | start_date | end_date 
----+----------------+----------------+------------- 
    1 | 2   | 2016-08-01 | 2016-10-12 
    2 | 3   | 2016-09-14 | 2016-12-01 
    3 | 2   | 2016-10-15 | 2017-02-10 

Ich mag Aufzeichnungen group by company_id aus dieser Tabelle durch start_date Sortierung wählen, sondern weil ich von company_id gruppiert kann ich nur wählen id: 3 so in Sortierung dieser Aufzeichnung am Ende der Liste.

das ist meine Frage:

SELECT id 
FROM advertiser 
WHERE end_date >= NOW() 
GROUP BY company_id 
ORDER BY start_date ASC 

und ausgewählte Datensätze IDs werden:

first: 2 
second: 3 

Wie kann ich wählen Aufzeichnungen wie diese?

first: 3 
second: 2 

UPDATE:

ich vergaß where zu meiner Anfrage hinzuzufügen.

+0

Warum '3' würde zuerst sein? '2' hat eine der frühen und der last'start_date' –

+0

'... ORDER BY MAX (start_date) DESC' – spencer7593

+0

In Ihrer Anfrage, warum Ihr do SELECT id' statt SELECT company_id'? –

Antwort

2

SQL DEMO

SELECT `id`, cia_last.`company_id`, `start_date`, `end_date`, mdate 
FROM (
     SELECT `id`, `company_id`, `start_date`, `end_date`, 
       @rn := if(@company_id = `company_id`, 
          @rn + 1, 
          if(@company_id := `company_id`,1,1) 
         ) as rn      
     FROM advertiser 
     CROSS JOIN (SELECT @company_id := '', @rn := 0) as par 
     ORDER BY `company_id`, `start_date` desc 
    ) cia_last 
INNER JOIN (SELECT `company_id`, MIN(`start_date`) as mdate 
      FROM advertiser 
      GROUP BY `company_id`) cia_first 
    ON cia_last.`company_id` = cia_first.`company_id` 
WHERE rn = 1 
ORDER BY mdate 
+0

Danke, es tut mir leid, ich habe vergessen, wo zu meiner Frage hinzuzufügen, ich habe meine Frage aktualisiert. – MajAfy

+0

Dann sollte Ihre Abfrage in Ordnung sein. Die erste Zeile wird '3' und nicht' 2' sein, da Sie –

+0

anzeigen. Diese Abfrage gibt 2 Datensätze zurück, da NOW größer ist als 2016-10-12, und jetzt möchte ich nach Startdatum von ID: 1 sortieren (was nicht in ausgewählten Datensätzen enthalten ist), ist es möglich ? – MajAfy