首页 > 其他分享 >FineReport使用日期参数,计算指定日期的不同天数差

FineReport使用日期参数,计算指定日期的不同天数差

时间:2024-10-21 13:49:14浏览次数:3  
标签:天数 s1 FineReport 日期 运货 货品 订购

一、计算每个客户在订购时间过去的不同时间范围内的货品价值和总运货费

在帆软报表(FineReport)中,你可以使用时间参数来参与表格计算。时间参数可以用于过滤数据、计算日期差、分组汇总等。以下是如何在帆软报表中设置和使用时间参数的步骤,并将其应用于表格计算。

步骤 1:创建时间参数

  • 1、打开报表设计器:
    • 打开你的 .cpt 报表文件。
  • 2、添加时间参数:
    • 在报表设计器左侧的“参数”面板中,点击“新建参数”按钮。
    • 创建一个参数 截止日期,类型为日期。
    • 可以设置默认值为当前日期,例如 =date() 或者允许用户输入。

步骤 2:编写 SQL 查询 如下操作

1.1、数据库查询

在这里插入图片描述

-- 计算每个客户在订购时间过去的不同时间范围内的货品价值和总运货费
SELECT
	公司名称,
	SUM ( CASE WHEN 天数差 BETWEEN 0 AND 90 THEN 货品价值 ELSE 0 END ) AS '0-90天货品价值',
	SUM ( CASE WHEN 天数差 BETWEEN 0 AND 90 THEN 运货费 ELSE 0 END ) AS '0-90天运货费',
	SUM ( CASE WHEN 天数差 BETWEEN 91 AND 180 THEN 货品价值 ELSE 0 END ) AS '91-180天货品价值',
	SUM ( CASE WHEN 天数差 BETWEEN 91 AND 180 THEN 运货费 ELSE 0 END ) AS '91-180天运货费',
	SUM ( CASE WHEN 天数差 BETWEEN 181 AND 360 THEN 货品价值 ELSE 0 END ) AS '181-360天货品价值',
	SUM ( CASE WHEN 天数差 BETWEEN 181 AND 360 THEN 运货费 ELSE 0 END ) AS '181-360天运货费',
	SUM ( CASE WHEN 天数差 > 360 THEN 货品价值 ELSE 0 END ) AS '360天以上货品价值',
	SUM ( CASE WHEN 天数差 > 360 THEN 运货费 ELSE 0 END ) AS '360天以上运货费' 
FROM
	(
	-- 子查询获取每个公司的订单记录,并计算与截止日期的天数差
	SELECT
		s3.公司名称,
		julianday ( '${截止日期}' ) - julianday ( s1.订购日期 ) AS 天数差,  --  SQLite 数据库
		--  MySQL数据库 DATEDIFF( STR_TO_DATE('${截止日期}', '%Y-%m-%d'),  STR_TO_DATE(s1.订购日期, '%Y-%m-%d')) AS 天数差,	
		--	SQLserver 数据库 DATEDIFF( DAY, CAST ( substr(s1.订购日期,10) AS DATE ), CAST ( '${截止日期}' AS DATE ) ) AS 天数差,
		( s2.单价 * s2.数量 ) AS 货品价值,
		s1.运货费 
	FROM
		S订单 s1
		LEFT JOIN S订单明细 s2 ON s1.订单ID = s2.订单ID
		LEFT JOIN S客户 s3 ON s1.客户ID = s3.客户ID 
	WHERE
		'${截止日期}' >= s1.订购日期 
	) AS sub 
GROUP BY
	公司名称;

1.2、内容设计

在这里插入图片描述

1.3、最终效果

在这里插入图片描述

二、输入呆滞时间,获取范围内明细

2.1、数据库查询

在这里插入图片描述

-- 计算每个记录的天数差,并过滤符合条件的记录
	SELECT
		s3.公司名称,
		julianday ( '${截止日期}' ) - julianday ( s1.订购日期 ) AS 天数差,
		 s1.订购日期 ,
		--  MySQL数据库 DATEDIFF( STR_TO_DATE('${截止日期}', '%Y-%m-%d'),  STR_TO_DATE(s1.订购日期, '%Y-%m-%d')) AS 天数差,	
		--	SQLserver 数据库 DATEDIFF( DAY, CAST ( substr(s1.订购日期,10) AS DATE ), CAST ( '${截止日期}' AS DATE ) ) AS 天数差,
		( s2.单价 * s2.数量 ) AS 货品价值,
		s1.运货费
	FROM
		S订单 s1
		LEFT JOIN S订单明细 s2 ON s1.订单ID = s2.订单ID
		LEFT JOIN S客户 s3 ON s1.客户ID = s3.客户ID 
	WHERE
		'${截止日期}' >= s1.订购日期 
		AND julianday('${截止日期}') - julianday(s1.订购日期) <= ${天数差}
    ;

2.2、内容设计

在这里插入图片描述

2.3、最终效果

在这里插入图片描述

标签:天数,s1,FineReport,日期,运货,货品,订购
From: https://blog.csdn.net/Davina_yu/article/details/143102975

相关文章

  • 几种常见的时间日期格式
    目录一:ISO8601标准格式二:美式日期时间格式三:纯数字日期时间格式一:ISO8601标准格式ISO8601标准是一种国际标准的日期和时间表示法,日期通过短横线分割,时间通过冒号分隔。特点:日期格式:YYYY-MM-DD例如:2024-05-30时间格式:HH:MM:SS例如:14:30:00日期和时间......
  • 137,[复杂递归+时间日期]SQL训练之,力扣,1384. 按年度列出销售总额
    学习:知识的初次邂逅复习:知识的温故知新练习:知识的实践应用目录一,原题力扣链接二,题干三,建表语句四,分析五,SQL解答六,验证七,知识点总结一,原题力扣链接.-力扣(LeetCode)二,题干Product 表:+---------------+---------+|ColumnName|Type|+------------......
  • 日期类
    ##2SimpleDateFormat类```javapublicstaticvoidmain(String[]args)throwsParseException{//日期格式类SimpleDateFormat//pattern:要使用的格式SimpleDateFormatsimpleDateFormat=newSimpleDateFormat("yyyy年MM月dd日HH:mm:ss.SSS");......
  • P5690 [CSP-S2019 江西] 日期 &&P7909 [CSP-J 2021] 分糖果 &&P5657 [CSP-S2019] 格雷
    今天继续懒惰,继续三合一!!![CSP-S2019江西]日期题目背景CSP-SJX2019T1题目描述Alice在纸上写下了一个日期,形式为\(\text{MM-DD}\),其中\(\text{MM}\)与\(\text{DD}\)都是两位数字,分别表示月和天,然而这个日期并不一定存在。Alice找来了Bob要他更改若干位上的数字,使得这个......
  • PostgreSQL中对日期时间进行分组
    PostgreSQL在PostgreSQL中对日期时间进行分组|极客教程(geek-docs.com)#按年月日时分组SELECTextract(yearfromcreated_time)asyear,extract(monthfromcreated_time)asmonth,extract(dayfromcreated_time)asday,extract(hourfromcreated_time)ashour,c......
  • 1283 回文日期 枚举 模拟 时间
    #include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintN=1e3+10;//每个月的天数,2月暂时设为29天,后续会根据闰年和平年调整inta[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};intmain(){ints1,s2,ans=0;cin>>......
  • MySQL 【日期】函数大全(六)
    目录1、TIME_FORMAT() 按照指定的格式格式化时间。2、TIME_TO_SEC() 将指定的时间值转为秒数。3、TIMEDIFF() 返回两个时间之间的差值。4、TIMESTAMP() 累加所有参数并将结果作为日期时间值返回。5、TIMESTAMPADD() 将指定的时间间隔加到一个日期时间值上并返回结果......
  • SQL语句——日期题目总结
    第一题:查询本周考试的学生成绩。 DATA_ADD()语法:date就是要操作的日期,INTERVAL就是要间隔的日期expr可以写数字,unit用来写单位,比如DATE_ADD(CURDATE(),INTERVAL7DAY)就是当前日期加上一星期。CURDATE()就是当前日期,格式:DATE_ADD(date,INTERVALexprunit)代码解释:就......
  • hive根据出生日期计算大于18岁
    使用Hive根据出生日期计算是否大于18岁在当今数据驱动的世界中,越来越多的企业和机构需要根据用户的出生日期来进行年龄验证。尤其是在涉及法律法规的领域,比如金融服务、在线社交平台等,确保用户年满18岁是至关重要的。ApacheHive是一个基于Hadoop的数据仓库工具,可以用于分......
  • 【CTF-SHOW】Web入门 Web27-身份证日期爆破 【关于bp intruder使用--详记录】
    1.点进去是一个登录系统,有录取名单和学籍信息发现通过姓名和身份证号可以进行录取查询,推测录取查询可能得到学生对应学号和密码,但是身份证号中的出生日期部分未知,所以可以进行爆破2.打开bp抓包这里注意抓的是学院录取查询系统发送POST类型进行查询的包,第一遍抓不到很正......