MySQL根据2条记录排序

时间:2016-11-18 19:18:31

标签: mysql sql-order-by

我有这张表并记录:

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

我想从group by company_id排序的表格中选择记录start_date,但因为我按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

更新

我忘记将where添加到我的查询中。

1 个答案:

答案 0 :(得分: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