踩坑经历(八)MySQL 实现 over partition by

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lwl2014100338/article/details/84137200
建表语句
/*
 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)类似的业务场景都可以这么做


猜你喜欢

转载自blog.csdn.net/lwl2014100338/article/details/84137200