Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/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
Sql 如果日期不存在,则返回最小值(日期)_Sql_Oracle_Case_Min - Fatal编程技术网

Sql 如果日期不存在,则返回最小值(日期)

Sql 如果日期不存在,则返回最小值(日期),sql,oracle,case,min,Sql,Oracle,Case,Min,在OracleSQLDeveloper中,我试图运行一个查询,其中我发现返回一个特定日期作为起始日期,但如果最早的现有日期大于指定的起始日期,则返回最小日期。我试着用CASE语句来做这件事,但是我一直得到一个“缺少右括号”的错误。以下是我迄今为止的代码: select a.program , a.match_file , (case when b.date = '27-JAN-13' then b.date else min(b.date end)) as Startdate fr

在OracleSQLDeveloper中,我试图运行一个查询,其中我发现返回一个特定日期作为起始日期,但如果最早的现有日期大于指定的起始日期,则返回最小日期。我试着用CASE语句来做这件事,但是我一直得到一个“缺少右括号”的错误。以下是我迄今为止的代码:

select 
  a.program
  , a.match_file
  , (case when b.date = '27-JAN-13' then b.date else min(b.date end)) as Startdate
from Schema1.program a, Schema1.detail b
where a.match_file = b.matchfile
  and (case when b.date=' ' then min(b.date) else b.date end) = '27-JAN-13'
  group by a.program, a.match_file
;

如果我做错了,有人能告诉我吗?我还尝试使用if语句和几个不同的联合声明,但是我不能让它返回我想要的。

您可能需要考虑合并函数(选择第一个非空参数)。但是,如果您针对空白而不是空值进行过滤,这可能不起作用。在这种情况下,案例陈述应该适合您的需要

在您的代码中,第一个case语句中的“end”位于min()内,这可能就是您出现错误的原因

, (case when b.date = '27-JAN-13' then b.date else min(b.date) end) as Startdate
我很难弄清楚您试图做什么,但根据您的描述,我提出了以下sql。我认为您不需要在where子句中进行任何筛选,因为您需要每一行结果。您只想知道每个程序/文件组合的最早日期是否在1月27日之后。select中的case语句负责处理此问题

“返回特定日期作为开始日期,但返回最短日期。” 如果最早的现有日期大于指定的开始日期 日期“


你的陈述在语法上不正确。 将
端部
移动到最小聚合之外,如下所示

select 
  a.program
  , a.match_file
  , (case when b.date = '27-JAN-13' then b.date else min(b.date) end) as Startdate
from Schema1.program a, Schema1.detail b
where a.match_file = b.matchfile
  and (case when b.date=' ' then min(b.date) else b.date end) = '27-JAN-13'
  group by a.program, a.match_file
;

只是一个建议,可能首先回答或解决OP问题,然后添加建议。我很困惑,想看看联合是如何解决这个问题的。你的答案看起来还是正确的。谢谢你的回复!我试着运行你的查询,但我找到了。我尝试使用to_date()来修复此问题,但仍然出现相同的错误。哦,等等!“最新”功能确实有效!我只需要使用一个可识别的日期格式。谢谢你的回复!我修复了语法并再次运行了它,但现在我得到了“错误ORA-00934:此处不允许使用组函数”。:(关于如何修复该错误的任何建议?抱歉,我没有看到该部分。where子句中不能有聚合函数。请将
和(case when b.date=''然后min(b.date)else b.date end='27-JAN-13'
从查询中删除。
select 
  a.program
  , a.match_file
  , (case when b.date = '27-JAN-13' then b.date else min(b.date) end) as Startdate
from Schema1.program a, Schema1.detail b
where a.match_file = b.matchfile
  and (case when b.date=' ' then min(b.date) else b.date end) = '27-JAN-13'
  group by a.program, a.match_file
;