记自己遇到的一次SQL查询问题,GROUP BY 嵌套的那些事

我在写公司项目的时候遇到了前同事留下的坑

而我又不想去动原有的SQL INSERT语句,怕影响整个结构

所以我查询下面数据的时候遇到了这个问题。

不是什么高级问题,希望能帮助遇到跟我同样问题的小伙伴。

这是我想要实现的最终查询出来的数据

每个数据都是新增的状态的

例如我日期9.4号,item_id 95一开始num是3,然后num是6之后,采取的是新增一条数据

也就是9.4号的item_id 95的最新数据是nun = 6

然后我需要做的是查最新3天的数据,然后取每个item_id对应日期里最新的那条数据,然后sum不同item_id,相同日期下的num。如上图

第一步我是写了这样一条SQL

SELECT * FROM(SELECT id,item_id,num,DATE_FORMAT(dcs.create_time,'%Y-%m-%d') AS create_time FROM table1 AS dcs WHERE (dcs.create_time >= '2021-08-19 00:00:00.0' AND dcs.create_time <= '2022-09-22 23:59:59.0' AND dcs.item_id IN (21,35)) GROUP BY dcs.create_time ORDER BY dcs.create_time DESC) lb GROUP BY lb.create_time,lb.item_id -- 最新

第二步,按照日期去分组,然后sum(num),然后日期去排序

SELECT lbb.id,lbb.item_id,SUM(lbb.num) AS num,lbb.create_time FROM(SELECT * FROM(SELECT id,item_id,num,DATE_FORMAT(dcs.create_time,'%Y-%m-%d') AS create_time FROM table1 AS dcs WHERE (dcs.create_time BETWEEN'2021-08-19 00:00:00.0' AND  '2022-09-22 23:59:59.0' AND dcs.item_id IN (21,35)) GROUP BY dcs.create_time ORDER BY dcs.create_time DESC) lb GROUP BY lb.create_time,lb.item_id) lbb GROUP BY lbb.create_time ORDER BY lbb.create_time DESC  -- 按时间和ID分开合并NUM

最终演变成上图的最后一步

搞定。

大神略过

新手记录帖而已。

-------------------------------------------------------

之前这个发过提问,有大神回答我了,工作忙没注意看

我发文章之前对比了大神的SQL

他写的是对的,我上面写的反而是错的

现纠正一下

这是大神写的(很简洁):

 
select sum(num),time from (select max(num) num,item_id,DATE_FORMAT(create_time,'%Y/%m/%d') time from item group by item_id,time) as t group by time

我写的(这是更改后正确的了):

SELECT lbb.id,lbb.item_id,SUM(lbb.num) AS num,lbb.create_time FROM(SELECT * FROM(SELECT id,item_id,num,DATE_FORMAT(dcs.create_time,'%Y-%m-%d') AS create_time FROM table1 AS dcs WHERE (dcs.create_time BETWEEN'2021-08-19 00:00:00.0' AND  '2022-09-22 23:59:59.0' AND dcs.item_id IN (21,35)) GROUP BY dcs.item_id,dcs.create_time ORDER BY dcs.create_time DESC) lb GROUP BY lb.create_time,lb.item_id) lbb GROUP BY lbb.create_time ORDER BY lbb.create_time DESC  -- 按时间和ID分开合并NUM

第一次GROUP BY的时候,我只分组了create_time,没加上item_id

谢谢哥们的指导

@Seabirds and fish

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值