我有这张表并记录:
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
添加到我的查询中。
答案 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