2016-11-18 54 views
-1

我有这样的表和记录的MySQL:排序根据2条

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 

我想从这个表由start_date排序选择记录group by company_id而是因为我通过company_id分组我只需选择ID:3所以在将此记录显示在列表的末尾。

这是我的查询:

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

并将选定的记录ID将是:

first: 2 
second: 3 

如何选择这样的记录?

first: 3 
second: 2 

UPDATE:

我忘了补充where到我的查询。

+0

为什么'3'将是第一? '2'有一个早和最后'start_date' –

+0

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

+0

在你的查询中,为什么你的'SELECT id'而不是'SELECT company_id'? –

回答

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

谢谢,我很抱歉,我忘记添加我的查询,我更新了我的问题。 – MajAfy

+0

然后你的查询应该没问题。第一行将是'3'而不是'2',因为您显示 –

+0

此查询返回2条记录,因为NOW比2016-10-12更大,现在我想通过id:1的start_date进行排序(不在选定的记录中), 可能吗 ? – MajAfy