Mysql SQL按日期选择上个月组的总和
我在MySQL数据中有下表Mysql SQL按日期选择上个月组的总和,mysql,sql,Mysql,Sql,我在MySQL数据中有下表 CREATE TABLE `new_table` ( `date1` varchar(20) DEFAULT NULL, `organisation` varchar(45) DEFAULT NULL, `proportion` varchar(45) DEFAULT NULL, `id` int NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5
CREATE TABLE `new_table` (
`date1` varchar(20) DEFAULT NULL,
`organisation` varchar(45) DEFAULT NULL,
`proportion` varchar(45) DEFAULT NULL,
`id` int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO `new_table` (`date1`, `organisation`, `proportion`) VALUES ('7/31/2020', 'Clinical Services', '50');
INSERT INTO `new_table` (`date1`, `organisation`, `proportion`) VALUES ('7/31/2020', 'Data and analytics', '60');
INSERT INTO `new_table` (`date1`, `organisation`, `proportion`) VALUES ('8/31/2020', 'Clinical Services', '12');
INSERT INTO `new_table` (`date1`, `organisation`, `proportion`) VALUES ('8/31/2020', 'Data and analytics', '40');
INSERT INTO `new_table` (`date1`, `organisation`, `proportion`) VALUES ('9/30/2020', 'Clinical Services', '25');
INSERT INTO `new_table` (`date1`, `organisation`, `proportion`) VALUES ('9/30/2020', 'Data and analytics', '20');
我想在满足以下条件的情况下,分别将date1和按date1计算的比例组的和作为开始和结束
如果上个月存在数据,则将上个月的比例相加作为本月的期初,将本月的比例相加作为期末。
当上个月的数据不存在时,SumProtopy是本月的期初。
结果表应为
日期
开放
结束
7/31/2020
110
110
8/31/2020
110
52
9/20/2020
52
45
我重新创造了这个局面。您可以使用LagOver实现您想要的目标:
select date1,coalesce( lag(sumprop,1)over( order by date1) ,sumprop) Opening,sumprop Closing from (
select date1,sum(proportion) sumprop from new_table
group by date1)t
db fiddle链接:
对于较旧版本的MySQL:
select date1,coalesce((select sum(proportion) from new_table NT WHERE NT.DATE1<N.DATE1),sum(proportion)) Opening,
sum(proportion) Closing from new_table N
group by date1
选择str_to_date1,'%m/%d/%Y'date1,
按str_to_date1、%m/%d/%Y'计算的订单合并百分比,
开盘后,
按比例结算
从新表
按日期分组1
如果月份内的日期可能不同,则使用LAST_DAYstr_to_datedate1,“%m/%d/%Y”
另外,使用了两个源数据值:来自问题文本和链接的小提琴。您使用的是哪个版本的MySQL?请以文本格式共享示例数据。我已经用示例数据和编辑器更新了问题。如果您指的是date1列,那么实际使用的数据源有VARCHAR列。我没有修改它的权限。为什么最后一个日期的截止日期是45,而24+35=59?@Akina该问题是由某个人编辑的,他的样本数据造成了不匹配。我更新了问题中的相同数据。因为您没有考虑年份边界。对于较旧版本的MySQL:Provided fiddle on paiza.io使用8.0.22。@草莓边界有什么问题?也许您的意思是日期列数据类型为varchar,格式不正确?@草莓。问题中没有明确提到年份界限是一个问题。请您详细说明一下?我刚才试图解决问题中提到的问题。很高兴从我的错误中吸取教训。