踩坑經歷(八)MySQL 實現 over partition by
阿新 • • 發佈:2018-11-16
建表語句
/* Navicat MySQL Data Transfer Source Server : test Source Server Type : MySQL Source Server Version : 50620 Source Host : localhost:3306 Source Schema : shop Target Server Type : MySQL Target Server Version : 50620 File Encoding : 65001 Date: 16/11/2018 12:15:29 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for orders -- ---------------------------- DROP TABLE IF EXISTS `orders`; CREATE TABLE `orders` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `money` decimal(10, 0) NOT NULL, `create_time` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, PRIMARY KEY (`Id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; -- ---------------------------- -- Records of orders -- ---------------------------- INSERT INTO `orders` VALUES (1, 1, 50, '1420520000'); INSERT INTO `orders` VALUES (2, 1, 100, '1420520010'); INSERT INTO `orders` VALUES (3, 2, 100, '1420520020'); INSERT INTO `orders` VALUES (4, 2, 200, '1420520030'); SET FOREIGN_KEY_CHECKS = 1;
需求:找出每個使用者最近一次的消費記錄
select t.user_id, t.money
from(
select ord.user_id, ord.money, ord.create_time from orders ord where ord.user_id > 0 and create_time > 0
order by user_id asc , create_time desc
) t group by user_id ;
查詢結果如下
總結
(1)利用 group_concat + substr等函式處理
(2)類似的業務場景都可以這麼做