请专家提供一些帮助,我将不胜感激。
在 SQL SELECT 语句中,我试图获取去年每月数据的最后一天。 例如,我可以轻松获取每个月的最后一天并将其连接到我的数据表中,但问题是,如果该月的最后一天没有数据,则没有返回数据。我需要的是 SELECT 返回最后一天的月份数据。
这可能很容易做到,但说实话,我的脑子开始疼了。
我附上了下面的选择,用于仅返回过去 12 个月内该月最后一天的数据。
预先感谢您的帮助!
SELECT fd.cust_id,fd.server_name,fd.instance_name,
TRUNC(fd.coll_date) AS coll_date,fd.column_name
FROM super_table fd,
(SELECT TRUNC(daterange,'MM')-1 first_of_month
FROM (
select TRUNC(sysdate-365,'MM') + level as DateRange
from dual
connect by level<=365)
GROUP BY TRUNC(daterange,'MM')) fom
WHERE fd.cust_id = :CUST_ID
AND fd.coll_date > SYSDATE-400
AND TRUNC(fd.coll_date) = fom.first_of_month
GROUP BY fd.cust_id,fd.server_name,fd.instance_name,
TRUNC(fd.coll_date),fd.column_name
ORDER BY fd.server_name,fd.instance_name,TRUNC(fd.coll_date)
最佳答案
您可能需要对数据进行分组,以便每个月的数据都在组中,然后在组内选择存在的最大日期。子查询可能是:
SELECT MAX(coll_date) AS last_day_of_month
FROM Super_Table AS fd
GROUP BY YEAR(coll_date) * 100 + MONTH(coll_date);
这假设存在函数 YEAR() 和 MONTH() 来从日期中提取年份和月份作为整数值。显然,这不会限制日期范围 - 您也可以这样做。如果 Oracle 中没有这些函数,那么您可以进行某种操作来获得等效的结果。
使用来自 Rhose 的信息(谢谢):
SELECT MAX(coll_date) AS last_day_of_month
FROM Super_Table AS fd
GROUP BY TO_CHAR(coll_date, 'YYYYMM');
这会获得相同的最终结果,将同一日历月的所有日期放入一个组中,然后确定该组中存在的最大值。
关于sql - SQLPLUS 中的本月最后一天发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1133584/