MySQL实战-->返回最近一次的数据

一、场景说明

1)某超市业务情况:某一超市不定期更新商品货源状态,但后台只记录该货品更新货源状态时间点的信息(详见下图一),未更新时后台该字段为null(后台数据库每日自动记录货源信息),现为方便查询某商品在某时间下的货源状态,对货源状态进行梳理,对记录为null的数据进行补充反馈最近一次的数据

2)商品货源状态表信息:

idtimecommoditystatus
10012023/3/1洗发水上架
10022023/3/1沐浴乳售罄
10032023/3/1肥皂上架
10042023/3/1花露水上架
10052023/3/1水桶上架
10012023/3/2洗发水
10022023/3/2沐浴乳下架
10032023/3/2肥皂
10042023/3/2花露水
10052023/3/2水桶
10012023/3/3洗发水下架
10022023/3/3沐浴乳
10032023/3/3肥皂
10042023/3/3花露水下架
10052023/3/3水桶
10012023/3/4洗发水
10022023/3/4沐浴乳
10032023/3/4肥皂
10042023/3/4花露水
10052023/3/4水桶

 3)商品货源状态表梳理效果展示:

idtimecommoditystatus梳理
10012023/3/1洗发水上架上架
10022023/3/1沐浴乳售罄售罄
10032023/3/1肥皂上架上架
10042023/3/1花露水上架上架
10052023/3/1水桶上架上架
10012023/3/2洗发水上架
10022023/3/2沐浴乳下架下架
10032023/3/2肥皂上架
10042023/3/2花露水上架
10052023/3/2水桶上架
10012023/3/3洗发水下架下架
10022023/3/3沐浴乳下架
10032023/3/3肥皂上架
10042023/3/3花露水下架下架
10052023/3/3水桶上架
10012023/3/4洗发水下架
10022023/3/4沐浴乳下架
10032023/3/4肥皂上架
10042023/3/4花露水下架
10052023/3/4水桶上架

 二、参考答案及效果演示:

-- 法一:
SELECT 
			a.*,
			(select a1.type
			 from (SELECT * FROM `20230314` where type!='') a1
			 where a.id=a1.id
			 and a.time>=a1.time
			 ORDER BY a1.time desc LIMIT 1) as 梳理
from `20230314` a
ORDER BY id,time,commodity,type;



-- 法二:
SELECT 
 id,time,commodity,type,
 SUBSTRING_INDEX(GROUP_CONCAT(type1 ORDER BY id,time,time1 ),',',-1 ) as 梳理
 FROM
 (SELECT
  a.*,
  a1.id AS id1,
  a1.time AS time1,
  a1.type AS type1 
 FROM `20230314` a 
 left JOIN ( SELECT * FROM `20230314` WHERE type !='') a1 on a.time >= a1.time
 AND a.id = a1.id 
 ) a1 
GROUP BY id,time,commodity,type
ORDER BY id,time,commodity,type;

三、示例表数据创建

drop table if exists `20230314`;
CREATE TABLE `20230314`  (
  `id` int NOT null,
  `time` datetime NOT null,
  `commodity` varchar(32) NOT null,
  `type` varchar(32)
) ;
INSERT INTO `20230314` VALUES ('1001','2023/03/01','洗发水','上架');
INSERT INTO `20230314` VALUES ('1002','2023/03/01','沐浴乳','售罄');
INSERT INTO `20230314` VALUES ('1003','2023/03/01','肥皂','上架');
INSERT INTO `20230314` VALUES ('1004','2023/03/01','花露水','上架');
INSERT INTO `20230314` VALUES ('1005','2023/03/01','水桶','上架');
INSERT INTO `20230314` VALUES ('1001','2023/03/02','洗发水','');
INSERT INTO `20230314` VALUES ('1002','2023/03/02','沐浴乳','下架');
INSERT INTO `20230314` VALUES ('1003','2023/03/02','肥皂','');
INSERT INTO `20230314` VALUES ('1004','2023/03/02','花露水','');
INSERT INTO `20230314` VALUES ('1005','2023/03/02','水桶','');
INSERT INTO `20230314` VALUES ('1001','2023/03/03','洗发水','下架');
INSERT INTO `20230314` VALUES ('1002','2023/03/03','沐浴乳','');
INSERT INTO `20230314` VALUES ('1003','2023/03/03','肥皂','');
INSERT INTO `20230314` VALUES ('1004','2023/03/03','花露水','下架');
INSERT INTO `20230314` VALUES ('1005','2023/03/03','水桶','');
INSERT INTO `20230314` VALUES ('1001','2023/03/04','洗发水','');
INSERT INTO `20230314` VALUES ('1002','2023/03/04','沐浴乳','');
INSERT INTO `20230314` VALUES ('1003','2023/03/04','肥皂','');
INSERT INTO `20230314` VALUES ('1004','2023/03/04','花露水','');
INSERT INTO `20230314` VALUES ('1005','2023/03/04','水桶','');

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值