获取Oracle SQL中没有记录的天数

获取Oracle SQL中没有记录的天数,sql,oracle,function,date,count,Sql,Oracle,Function,Date,Count,我有一张桌子,上面有一家旅馆主人的所有消费品,这家旅馆有一个约会对象和一位清洁女工。让我们假设我想要一个月内清洁女工没有记录的天数 我该怎么做 模式: 创建表LINHA_CONTA_CONSUMO ID_CONTA_CONSUMO INT 约束FK_LINHA_CONTA_CONSUMO引用CONTA_CONSUMO ID, 林哈国际酒店, 约束PK_LINHA_CONTA_CONSUMO主键ID_CONTA_CONSUMO,LINHA, ID_ARTIGO_CONSUMO INT 约束FK_L

我有一张桌子,上面有一家旅馆主人的所有消费品,这家旅馆有一个约会对象和一位清洁女工。让我们假设我想要一个月内清洁女工没有记录的天数

我该怎么做

模式:

创建表LINHA_CONTA_CONSUMO ID_CONTA_CONSUMO INT 约束FK_LINHA_CONTA_CONSUMO引用CONTA_CONSUMO ID, 林哈国际酒店, 约束PK_LINHA_CONTA_CONSUMO主键ID_CONTA_CONSUMO,LINHA, ID_ARTIGO_CONSUMO INT 约束FK_LINHA_CONTA_CONSUMO_ARTIGO引用ARTIGO_CONSUMO ID, 数据登记日期, 量子化, 预科单元编号6,2, 卡马雷拉国际酒店 约束FK_LINHA_CONTA_CONSUMO_CAM引用CAMAREIRA ID ; 这是我当前的功能,我需要将每位清洁女工没有记录的天数添加到光标_CAMAREIRA:

创建或替换函数FNCOBTERREGISTOMENSALCAMAREIRAMES_PARAM INT,ANO_PARAM INT RETURN SYS_REFCURSOR 是 光标\u CAMAREIRA系统\u REFCURSOR; 开始 -科洛卡没有身份证,没有名字,没有登记在册的身体,没有数据 -对数据进行最终注册。EFETUA UM JOIN NAS选项卡功能参数总线名称E -我们需要一家信息餐厅。DADOS DADOS ESTAO AGRUPADOS PELO NOME/ID DA CAMAREIRA 打开光标_CAMAREIRA以查看 选择C.ID, 诺姆, 总消耗量*总消耗量, MINLCC.DATA_REGISTO作为PRIMEIRO_REGISTO, MAXLCC.DATA\u注册表作为最终注册表 来自卡马雷拉C 连接函数 关于F.ID=C.ID 加入LINHA_CONTA_CONSUMO LCC 关于LCC.ID_CAMAREIRA=C.ID 其中ANO_PARAM为NULL,且 从LCC.DATA_REGISTO提取月份=MES_参数和 从LCC.DATA\U注册表中提取年份= 从SYSDATE开始的年份-1 或者ANO_参数不为NULL,并且 从LCC.DATA_REGISTO提取月份=MES_参数和 从LCC.DATA_REGISTO=ANO_参数提取年份 按C.ID、F.NOME分组; 返回光标_CAMAREIRA; 终止 例如,如果我有:

ID_CONTA_CONSUMO 林哈 我是阿蒂戈消费者 数据注册 量子化 统一前 卡马雷拉酒店 295 1. 54 2020-01-02 00:00:00 5. 900 14 296 1. 55 2020-01-03 00:00:00 1. 6 15 324 1. 23 2020-01-03 00:00:00 1. 8 13 297 1. 56 2020-01-04 00:00:00 1. 5 16 298 1. 57 2020-01-05 00:00:00 1. 4 17 325 1. 24 2020-01-05 00:00:00 1. 7 14 299 1. 58 2020-01-06 00:00:00 1. 3 18 354 1. 53 2020-01-06 00:00:00 1. 8 13 326 1. 25 2020-01-06 00:00:00 1. 6 15 300 1. 59 2020-01-07 00:00:00 1. 2 19 您可以使用NVL2函数,该函数将在总和聚合中计算日期值data_REGISTO的空值,然后减去当前月份内的天数,例如

AVG(TO_NUMBER(TO_CHAR(LAST_DAY(DATA_REGISTO),'dd'))) 
- SUM(NVL2(LCC.DATA_REGISTO,1,0)) AS NO_CLEANING_LADY
因为你不在乎有多少不同的日子

将LINHA_CONTA_CONSUMO表连接到

如果您想要当月没有记录的天数:

(extract(day from max(last_day(data_registro)) -
 count(distinct trunc(data_registo))
) as no_data_registo

请提供示例数据和所需结果。@GordonLinoff完成,很抱歉没有首先添加!您需要一个带有月\日表的左联接。为此,可以在游标查询中使用递归cte。否则,你不能根据卡玛雷拉没有去的日期筛选你的表格,你不会有任何记录,嗯?谢谢你的快速输入!我现在添加了示例数据,请您阅读数据库中的内容并再次帮助我好吗?很抱歉给您带来不便,您的回答没有解决我的问题,请尝试包含LAST_DAY函数的新样式,我将根据您的需要从中提取当月的总天数@RafaelmoreiraThank,像符咒一样解决它!不客气@RafaelMoreira,祝你今天愉快!哦,我明白了,我明白了,再次谢谢你,伙计,你刚刚救了我!这是干净的,谢谢,我用过它,它也很容易理解@拉斐尔莫雷拉。我很惊讶你没有接受这个答案。很抱歉,因为我理解了唯一的答案,这是一个问题,或者不改变连接和其他结构,我接受了另一个。
(extract(day from max(last_day(data_registro)) -
 count(distinct trunc(data_registo))
) as no_data_registo