需求:要根據每種店鋪型別獲取到建立時間最早的那條記錄
表結構如下:
create table `finance_rent_mode_dealer` (
`id` int(11) unsigned not null auto_increment comment '主鍵id',
`dealerid` int(11) not null default '0' comment '商家id',
`type` tinyint(3) not null default '0' comment '型別 1,自營;2,4s店鋪;',
`rent_price` decimal(10,2) not null default '0.00' comment '直租**(萬元)',
`modeid` int(11) not null default '0' comment '車型id',
`createid` int(11) not null default '0' comment '建立人id',
`createtime` timestamp not null default current_timestamp comment '建立時間',
`updateid` int(11) not null default '0' comment '修改人',
`updatetime` timestamp not null default current_timestamp on update current_timestamp comment '修改時間',
`status` tinyint(3) not null default '0' comment '狀態 1,生效;0,失效;',
`seriesid` int(11) not null default '0' comment '車系id',
`brandid` int(11) not null default '0' comment '品牌id',
`rent_status` tinyint(3) not null default '-1' comment '直租狀態 (-2=車型亮點無效,-1=直租方案無效,1=上架,2=下架)',
primary key (`id`),
key `idx_dealerid` (`dealerid`),
key `idx_modeid` (`modeid`,`status`,`type`)
) engine=innodb auto_increment=1 default charset=utf8 comment='金融商家車型關聯表(直租)';
實現該需求有兩種方案
第一種方案:先排序後分組
select * from (select a1.modeid,a1.type,a1.createtime,a1.dealerid,status,rent_status,brandid,a1.seriesid
from finance_rent_mode_dealer a1
where a1.status=1 and a1.rent_status=1
order by a1.modeid desc,a1.type desc, a1.createtime asc) a
group by a.modeid desc,a.type desc
order by null;
### 先排好序,然後分組的時候會自動獲取到第一條資料,資料量會多一些
第二種方案:先分組後排序
select a1.modeid,a1.type,substring_index(group_concat(dealerid order by createtime asc),',',1) dealerid,status,rent_status
from finance_rent_mode_dealer a1
where a1.status=1 and a1.rent_status=1
group by a1.modeid desc,a1.type desc;
### 分組的過程實際上就已經有序了,而且不用巢狀就能獲取到想要的結果,主要是用group_contact語句
最終結果對比:
select @@profiling;
##set profiling=1; ###測試接下來兩句的效能
select sql_no_cache modeid,type,substring_index(group_concat(dealerid order by createtime asc),',',1) dealerid
from finance_rent_mode_dealer
where status=1 and rent_status=1
group by modeid desc,type desc;
select sql_no_cache * from (select a1.modeid,a1.type,a1.createtime,a1.dealerid,status,rent_status,brandid,a1.seriesid
from finance_rent_mode_dealer a1
where a1.status=1 and a1.rent_status=1
order by a1.modeid desc,a1.type desc, a1.createtime asc) a
group by a.modeid desc,a.type desc
order by null;
show profiles; ###顯示出每乙個sql語句的執行時間
最終結果:
從結果上可以看出,因為先分組的結果使用了大量的函式,導致效能反而沒有先排序後分組的優秀,看來sql語句中使用函式是不可取的。
appium獲取一組元素
import os import time import base64 desired caps desired caps platformname android desired caps platformversion 7.1 desired caps devicesname 192.168.5...
程式設計題 每K個一組反轉鍊錶
反轉鍊錶的高階版。給出乙個鍊錶,每 k 個節點一組進行翻轉,並返回翻轉後的鍊錶。k 是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。public static listnode reverselist listnode head,int k ...
每k個一組反轉鍊錶 python版
給出乙個鍊錶,每 k 個節點一組進行翻轉,並返回翻轉後的鍊錶。k 是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。說明 你需要自行定義鍊錶結構,將輸入的資料儲存到你的鍊錶中 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換 你的演...