記錄一次比較查詢,需求是比較內容是否一次比一次高,用來作為標簽依據
大致問題如下 簡化:
班級中有若干人,若干次考試。需要查詢某人在考試時成績越來越好(分數是每次都有增長)
思路:
1。使用group by 分組, 然后在查詢內容使用 group_concat(【成績字段】 order by 【時間或者自增長id】) 查詢出每次按時間順序考試的成績 拼接,
2。使用group by 分組, 然后在查詢內容使用 group_concat(【成績字段】 order by 【成績字段】) 查詢出按成績大小 排序的 內容。
join 上去。
再用 查詢出來的內容比較 是否相同。如果相同。那么就說明 這個人的成績每次都有提升。
具體sql 如下:
創建表結構:
CREATE TABLE `t_stock` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`stock_id` varchar(11) DEFAULT NULL COMMENT '股票代碼',
`stock_name` varchar(20) DEFAULT NULL COMMENT '股票名稱',
`sell_amount` double DEFAULT NULL COMMENT '主動出售統計金額',
`buy_amount` double DEFAULT NULL COMMENT '主動購買金額',
`unknow_amount` double DEFAULT NULL COMMENT '未知動向金額',
`market_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '交易時間',
`create_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '創建時間',
`data_amount` double DEFAULT NULL COMMENT '今日收盤價格',
`big_sell_amount` double DEFAULT NULL COMMENT '主動出售統計大單金額',
`big_buy_amount` double DEFAULT NULL COMMENT '主動購買大單金額',
PRIMARY KEY (`id`),
KEY `stock_id` (`stock_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=44248 DEFAULT CHARSET=utf8 COMMENT='記錄每天某些股票的交意記錄為以后提供參考';
大致查詢sql:
select * from (
select GROUP_CONCAT((buy_amount+sell_amount) order by buy_amount+sell_amount) hl,stock_id , stock_name ,
SUBSTRING_INDEX(GROUP_CONCAT(data_amount order by id),',',1) from t_stock group by stock_id
)aa
join
(
select GROUP_CONCAT((buy_amount+sell_amount) order by id) idhl,stock_id , stock_name ,
SUBSTRING_INDEX(GROUP_CONCAT(data_amount order by id),',',1) from t_stock group by stock_id
)bb
on aa.stock_id = bb.stock_id
where aa.hl=bb.idhl
應該還能優化,暫時先想到這種,記錄一下