Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL按日期选择上个月组的总和_Mysql_Sql - Fatal编程技术网

Mysql SQL按日期选择上个月组的总和

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

我在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 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,格式不正确?@草莓。问题中没有明确提到年份界限是一个问题。请您详细说明一下?我刚才试图解决问题中提到的问题。很高兴从我的错误中吸取教训。