SQL-在表字段和联接字段中查找最小值
这里有一个有趣的,也许是好的一般问题。如何在特定表中找到对应于ID的最小时间值。没有例子很难解释,所以这里有一个: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.
- 表A包含字段ID、阶段1\u日期、阶段2\u日期
- 表B1包含字段A_ID(fk到A.ID)、日期
- 表B2包含字段A_ID(fk到A.ID)、日期
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 . . . 问题是什么?这个问题似乎很容易理解。你是个天才