oracle根据代码分组查询 1天 7天 30天 90天的数量

博客围绕Oracle展开,但具体内容缺失。Oracle是后端开发中重要的数据库系统,在数据存储、管理等方面有广泛应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


 -- t-1数据
 select t1.FUNDCODE,
 sum (CASE WHEN TO_DATE(t2.VC_REQUESTDATE,'yyyy-mm-dd') >  TRUNC(SYSDATE-1) THEN 1   ELSE 0 END) as"1天",
 sum (CASE WHEN TO_DATE(t2.VC_REQUESTDATE,'yyyy-mm-dd') >  TRUNC(SYSDATE-8) THEN 1   ELSE 0 END) as"7天",
 sum (CASE WHEN TO_DATE(t2.VC_REQUESTDATE,'yyyy-mm-dd') >  TRUNC(SYSDATE-31) THEN 1   ELSE 0 END) as"30天",
 sum (CASE WHEN TO_DATE(t2.VC_REQUESTDATE,'yyyy-mm-dd') >  TRUNC(SYSDATE-90) THEN 1   ELSE 0 END) as"90天"
-- sum(case when  TO_DATE(t2.VC_REQUESTDATE,'yyyy-mm-dd') >  TRUNC(SYSDATE-1) then COUNT(1) else 0 end) as 1天
-- sum(case when TO_DATE(t2.VC_REQUESTDATE,'yyyy-mm-dd') >  TRUNC(SYSDATE-7)  then  COUNT(1) else 0 end) as 7天,
-- sum(case when TO_DATE(t2.VC_REQUESTDATE,'yyyy-mm-dd') >  TRUNC(SYSDATE-30)  then  COUNT(1) else 0 end) as 30天,
-- sum(case when TO_DATE(t2.VC_REQUESTDATE,'yyyy-mm-dd') >  TRUNC(SYSDATE-90)  then  COUNT(1) else 0 end) as 90天
from 表1 t1 JOIN  表2 t2 on  t1.FUNDCODE = t2.VC_FUNDCODE
where       t2.VC_REQUESTDATE is not null and TO_DATE(t2.VC_REQUESTDATE,'yyyy-mm-dd') >  TRUNC(SYSDATE-90) and t2.C_CUSTTYPE = 1  and C_BUSINFLAG  in('020','022','039') GROUP BY  t1.FUNDCODE;

 

<think>好的,用户想查找一个SQL函数,用来返回指定日期所在季度的最后一。他们提到了EOMONTH函数,但不确定是否有其他替代方法。首先,我需要确认EOMONTH的功能。EOMONTH通常返回指定月份的最后一,但季度涉及三个月,所以可能需要更复杂的处理。 接下来,我需要考虑不同的SQL方言,比如SQL Server、Oracle、MySQL或PostgreSQL,因为不同的数据库可能有不同的内置函数。用户可能没有指定具体的数据库系统,所以需要给出通用的解决方案或者涵盖主要系统的例子。 首先,在SQL Server中,虽然没有直接返回季度末的函数,但可以通过计算季度最后一个月,然后使用EOMONTH。例如,每个季度的最后一个月是3月、6月、9月、12月,所以可以计算给定日期所在季度的结束月份,再调用EOMONTH。 然后,对于其他数据库,比如Oracle,可以使用ADD_MONTHS和TRUNC函数来处理。例如,TRUNC(date, 'Q')可以获取季度的第一,然后加上两个月,再获取月末。 在MySQL中,可能需要使用DATE_ADD和MAKEDATE函数来构造季度的结束日期。比如,确定季度后,将月份调整为季度的最后一个月,然后找到该月的最后一。 此外,还需要考虑用户是否希望一个通用的解决方案,可能使用CASE语句来判断月份属于哪个季度,然后返回相应的最后一日期。例如,当月份在1-3月时,返回3月31日,以此类推。这种方法虽然繁琐,但兼容性较好。 还需要注意闰年情况,比如二月的最后一可能不同,但季度末通常是3月31日,所以不影响。另外,用户可能需要处理不同日期格式的输入,但假设输入是有效的日期类型。 总结步骤:首先确定日期所在季度,找到该季度的最后一个月,然后计算该月的最后一。不同数据库的实现方式不同,需要分别说明。同时,提供使用EOMONTH结合季度计算的示例,以及替代方法。可能还需要提到自定义函数的方法,如果用户允许创建函数的话。 最后,确保回答覆盖主要数据库系统,并给出具体的代码示例,帮助用户直接应用。同时,检查是否有引用内容需要标注,例如EOMONTH的用法或相关函数的文档。</think>在 SQL 中,若需返回指定日期所在季度的最后一,可以通过以下方法实现(不同数据库语法略有差异): --- ### 1. **SQL Server 中使用 `EOMONTH` 和季度计算** ```sql SELECT EOMONTH(DATEADD(QUARTER, DATEDIFF(QUARTER, 0, @InputDate), 2)) AS QuarterEndDate; ``` - **原理**: - `DATEDIFF(QUARTER, 0, @InputDate)` 计算输入日期与基准日期(1900-01-01)之间的季度差[^2]。 - `DATEADD(QUARTER, ... , 2)` 将基准日期偏移到当前季度的第三个月(即季度末的月份)。 - `EOMONTH` 返回该偏移月份的月末日期。 --- ### 2. **Oracle 中使用 `TRUNC` 和 `ADD_MONTHS`** ```sql SELECT ADD_MONTHS(TRUNC(SYSDATE, 'Q'), 3) - 1 AS QuarterEndDate FROM DUAL; ``` - **原理**: - `TRUNC(SYSDATE, 'Q')` 获取当前季度的第一。 - `ADD_MONTHS(..., 3)` 跳转到下一季度的第一。 - `-1` 回退一得到当前季度的最后一。 --- ### 3. **MySQL 中通过条件判断实现** ```sql SELECT CASE WHEN MONTH(input_date) BETWEEN 1 AND 3 THEN MAKEDATE(YEAR(input_date), 90) -- 3月31日 WHEN MONTH(input_date) BETWEEN 4 AND 6 THEN MAKEDATE(YEAR(input_date), 181) -- 6月30日 WHEN MONTH(input_date) BETWEEN 7 AND 9 THEN MAKEDATE(YEAR(input_date), 273) -- 9月30日 ELSE MAKEDATE(YEAR(input_date), 365) -- 12月31日 END AS QuarterEndDate; ``` - **说明**:直接通过月份判断所属季度,并返回固定月末日期(需注意闰年影响 12 月)。 --- ### 4. **通用替代方案(跨数据库)** 若数据库不支持 `EOMONTH`,可使用以下逻辑: ```sql SELECT DATEADD(DAY, -1, DATEADD(MONTH, ((DATEPART(QUARTER, @InputDate) * 3) - 2), DATEADD(YEAR, YEAR(@InputDate) - 1900, 0))) AS QuarterEndDate; ``` - **原理**:计算季度对应的结束月份,并通过日期偏移得到月末。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值