mysql:取group by第一條數據
示例數據(表enterprise_info)
SELECT * FROM enterprise_info;
id | name | gdp | update_time |
---|---|---|---|
1 | 訊騰 | 240 | 2018/3/31 2:49 |
2 | 度百 | 120 | 2018/3/24 2:50 |
3 | 裏阿 | 340 | 2018/3/25 0:00 |
4 | 裏阿 | 460 | 2018/3/28 0:00 |
5 | 裏阿 | 530 | 2018/2/25 0:00 |
6 | 裏阿 | 450 | 2018/1/25 0:00 |
7 | 訊騰 | 320 | 2018/1/12 0:00 |
8 | 訊騰 | 435 | 2018/3/24 0:00 |
9 | 訊騰 | 564 | 2018/2/15 0:00 |
10 | 度百 | 435 | 2018/3/31 0:00 |
11 | 度百 | 675 | 2018/2/22 0:00 |
12 | 度百 | 232 | 2018/3/30 0:00 |
數據說明:
- 共有三個name:訊騰、度百、裏阿
- id與update_time不是正相關的關係
目標
獲取三個name的最新數據,並插入到新表(n_enterprise_info)中
步驟一:創建新表
CREATE TABLE n_enterprise_info LIKE enterprise_info;
步驟二:查詢並插入結果
INSERT INTO n_enterprise_info(name, gdp, update_time)
SELECT en.name, en.gdp, en.update_time FROM enterprise_info en
JOIN (
SELECT name, max(update_time) up_time
FROM enterprise_info
GROUP BY name ORDER BY update_time DESC
) tmp
ON en.name = tmp.name AND en.update_time = tmp.up_time;
結果示例
SELECT * FROM n_enterprise_info;
id | name | gdp | update_time |
---|---|---|---|
1 | 訊騰 | 240 | 2018/3/31 2:49 |
2 | 裏阿 | 460 | 2018/3/28 0:00 |
3 | 度百 | 435 | 2018/3/31 0:00 |