Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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 - Fatal编程技术网

SQL-在表字段和联接字段中查找最小值

SQL-在表字段和联接字段中查找最小值,sql,Sql,这里有一个有趣的,也许是好的一般问题。如何在特定表中找到对应于ID的最小时间值。没有例子很难解释,所以这里有一个: 表A包含字段ID、阶段1\u日期、阶段2\u日期 表B1包含字段A_ID(fk到A.ID)、日期 表B2包含字段A_ID(fk到A.ID)、日期 我想为A中的每个ID查找A.stage1_date、A.stage2_date、B1.date、B2.date之间的最小值 有什么想法吗?您可以使用LEAST()函数返回表达式列表中的最小值: SELECT LEAST(A.

这里有一个有趣的,也许是好的一般问题。如何在特定表中找到对应于ID的最小时间值。没有例子很难解释,所以这里有一个:

  • 表A包含字段ID、阶段1\u日期、阶段2\u日期
  • 表B1包含字段A_ID(fk到A.ID)、日期
  • 表B2包含字段A_ID(fk到A.ID)、日期
我想为A中的每个ID查找A.stage1_date、A.stage2_date、B1.date、B2.date之间的最小值

有什么想法吗?

您可以使用
LEAST()
函数返回表达式列表中的最小值:

SELECT 
    LEAST(A.stage1_date, A.stage2_date, B1.date, B2.date) 
FROM 
    A JOIN B1 ON A.ID = B1.A_ID 
      JOIN B2 ON A.ID = B2.A_ID

不幸的是,
least()
函数在其任何参数为
NULL
时返回
NULL
。并且,您可能希望为此使用左外部联接,以防其中一个B表缺少
A_ID

以下是一种更安全的方法:

select id, min(thedate) as mindate
from (select id, stage1_date as thedate from a union all
      select id, stage2_date from a union all
      select a_id, date from b1 union all
      select a_id, date from b2
     ) t
group by id;

这是在什么平台上?这实际上是在Vertica上你有一个打字错误,而且不仅仅是在Oracle上?好吧,我真的不知道有一个最小的函数,这是非常有用的…我试图用两个嵌套子查询和多个Union来解决这个问题。我认为vertica最不可行:这假设两个b表的每个
A\u ID
都只有一行。在我的情况下,它们不会这样做…好吧,这看起来很有希望,我将不得不测试并让您知道它是如何运行的,因此我尝试了使用联合来解决嵌套查询,但是这个def看起来解决了一些我无法解决的问题out@SS781 . . . 问题是什么?这个问题似乎很容易理解。你是个天才