Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/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
Teradata 在子查询中使用partition子句_Teradata_Partition - Fatal编程技术网

Teradata 在子查询中使用partition子句

Teradata 在子查询中使用partition子句,teradata,partition,Teradata,Partition,我是TD的新手,需要一些关于以下问题的帮助 我们有一个查询,其中from子句如下所示: `*sel * FROM V_ACOR ACOR, V_ORTR ORTR, V_MSAC MSAC, V_MSRC MSRC, V_REOR REOR WHERE ACOR.ORDER_ID = ORTR.ORDER_ID AND (SELECT MIN(ARRIVE_DATE_ORTR) AS ARRIVE_DATE FROM V_ORTR ) BETWEEN MSAC.BEGIN_DATE

我是TD的新手,需要一些关于以下问题的帮助

我们有一个查询,其中from子句如下所示:

`*sel *
FROM 
V_ACOR  ACOR,
V_ORTR ORTR,
V_MSAC MSAC,
V_MSRC MSRC,
V_REOR REOR
WHERE 
ACOR.ORDER_ID = ORTR.ORDER_ID
AND 
(SELECT MIN(ARRIVE_DATE_ORTR)  AS ARRIVE_DATE FROM V_ORTR )
BETWEEN  MSAC.BEGIN_DATE AND  MSAC.END_DATE
AND 
(SELECT MIN(ARRIVE_DATE_ORTR)  AS ARRIVE_DATE FROM V_ORTR )
BETWEEN  MSRC.BEGIN_DATE AND  MSRC.END_DATE
AND  
(SELECT MIN(ARRIVE_DATE_REOR)  AS ARRIVE_DATE FROM V_REOR )
BETWEEN  MSAC.BEGIN_DATE AND  MSAC.END_DATE
AND 
(SELECT MIN(ARRIVE_DATE_REOR)  AS ARRIVE_DATE FROM V_REOR )
BETWEEN  MSRC.BEGIN_DATE AND  MSRC.END_DATE*`
现在的问题是,所有情况下的最小值(到达日期),给我所有条目的最小值。我们的要求是根据订单ID获取最小日期。因此,我们尝试用以下内容代替最小日期(到达日期):

这显示了一个错误:

子查询中不允许使用有序分析函数。

我们也尝试了以下方法:

`*sel * from 
(
sel A.*
from (sel * FROM V_ORTR
QUALIFY row_NUMBER() over (PARTITION  by ORTR.ORDER_ID order by ORTR.ARRIVE_DATE ASC)=1
) A ,
sel B.*
from (sel * FROM V_REOR
QUALIFY row_NUMBER() over (PARTITION  by REOR.ORDER_ID order by REOR.ARRIVE_DATE_ORDR_TR ASC)=1 
)B ,
V_ACOR,
V_MSAC,
V_MSRC
WHERE 
ACOR.ORDER_ID_ORDR = A.ORDER_ID
AND A.ARRIVE_DATE_ORTR BETWEEN MSAC.BEGIN_DATE AND MSAC.END_DATE
AND A.ARRIVE_DATE_ORTR BETWEEN MSRC.BEGIN_DATE AND MSRC.END_DATE
AND B.ARRIVE_DATE_REOR BETWEEN MSAC.BEGIN_DATE AND MSAC.END_DATE
AND B.ARRIVE_DATE_REOR BETWEEN MSRC.BEGIN_DATE AND MSRC.END_DATE
)*`
这也给出了以下错误:


语法错误,应为名称或Unicode分隔标识符或“(“between.”和“sel”关键字。

不能在子查询中使用OLAP函数,因为它们可能相互关联。有一个技巧可以处理此特定错误:将其移动到子查询中的派生表中(无法关联到派生表):

但这将不起作用,因为它将返回多个带有

“3669子查询返回了多个值”

第二次尝试时出现了一些语法错误。此外,您不需要将OLAP函数嵌套在派生表中,因为它已经存在于派生表中。有些人(或更好的是很多人)将“派生表”称为“子查询”,在Oracle中称为“Inlie视图”,因此命名可能也会混淆:

SELECT * 
FROM 
 (
   SELECT * FROM V_ORTR
   QUALIFY ROW_NUMBER() OVER (PARTITION  BY ORTR.ORDER_ID ORDER BY ORTR.ARRIVE_DATE ASC) = 1
 ) A ,
 (
   SELECT * FROM V_REOR
   QUALIFY ROW_NUMBER() OVER (PARTITION  BY REOR.ORDER_ID ORDER BY REOR.ARRIVE_DATE_ORDR_TR ASC) = 1 
 ) B,
   V_ACOR,
   V_MSAC,
   V_MSRC
WHERE 
  ACOR.ORDER_ID_ORDR = A.ORDER_ID
AND A.ARRIVE_DATE_ORTR BETWEEN MSAC.BEGIN_DATE AND MSAC.END_DATE
AND A.ARRIVE_DATE_ORTR BETWEEN MSRC.BEGIN_DATE AND MSRC.END_DATE
AND B.ARRIVE_DATE_REOR BETWEEN MSAC.BEGIN_DATE AND MSAC.END_DATE
AND B.ARRIVE_DATE_REOR BETWEEN MSRC.BEGIN_DATE AND MSRC.END_DATE

但是你是舒尔吗?这些都是连接条件?我希望有一些附加条件,至少A.ORDER\u ID=B.ORDER\u ID

你不能在子查询中使用OLAP函数,因为它们可能是相关的。有一个技巧可以处理这个特定错误:将其移动到子查询中的派生表中(无法关联到派生表):

但这将不起作用,因为它将返回多个带有

“3669子查询返回了多个值”

第二次尝试时出现了一些语法错误。此外,您不需要将OLAP函数嵌套在派生表中,因为它已经存在于派生表中。有些人(或更好的是很多人)将“派生表”称为“子查询”,在Oracle中称为“Inlie视图”,因此命名可能也会混淆:

SELECT * 
FROM 
 (
   SELECT * FROM V_ORTR
   QUALIFY ROW_NUMBER() OVER (PARTITION  BY ORTR.ORDER_ID ORDER BY ORTR.ARRIVE_DATE ASC) = 1
 ) A ,
 (
   SELECT * FROM V_REOR
   QUALIFY ROW_NUMBER() OVER (PARTITION  BY REOR.ORDER_ID ORDER BY REOR.ARRIVE_DATE_ORDR_TR ASC) = 1 
 ) B,
   V_ACOR,
   V_MSAC,
   V_MSRC
WHERE 
  ACOR.ORDER_ID_ORDR = A.ORDER_ID
AND A.ARRIVE_DATE_ORTR BETWEEN MSAC.BEGIN_DATE AND MSAC.END_DATE
AND A.ARRIVE_DATE_ORTR BETWEEN MSRC.BEGIN_DATE AND MSRC.END_DATE
AND B.ARRIVE_DATE_REOR BETWEEN MSAC.BEGIN_DATE AND MSAC.END_DATE
AND B.ARRIVE_DATE_REOR BETWEEN MSRC.BEGIN_DATE AND MSRC.END_DATE

但您是舒尔吗?这些都是加入条件?我希望有一些附加条件,至少A.ORDER_ID=B.ORDER_ID

您使用的是哪个DBMS(和版本)?Postgres?Oracle?SQL Server?DB2?谢谢您的回复。我们使用的是Teradata版本13哪个DBMS(和版本)您正在使用?Postgres?Oracle?SQL Server?DB2?谢谢您的回复。我们正在使用Teradata 13版谢谢您的回复。我们还有两个连接。是的,OEDER_ID上的连接也在那里。谢谢您的回复。我们还有两个连接。是的,OEDER_ID上的连接也在那里。
SELECT * 
FROM 
 (
   SELECT * FROM V_ORTR
   QUALIFY ROW_NUMBER() OVER (PARTITION  BY ORTR.ORDER_ID ORDER BY ORTR.ARRIVE_DATE ASC) = 1
 ) A ,
 (
   SELECT * FROM V_REOR
   QUALIFY ROW_NUMBER() OVER (PARTITION  BY REOR.ORDER_ID ORDER BY REOR.ARRIVE_DATE_ORDR_TR ASC) = 1 
 ) B,
   V_ACOR,
   V_MSAC,
   V_MSRC
WHERE 
  ACOR.ORDER_ID_ORDR = A.ORDER_ID
AND A.ARRIVE_DATE_ORTR BETWEEN MSAC.BEGIN_DATE AND MSAC.END_DATE
AND A.ARRIVE_DATE_ORTR BETWEEN MSRC.BEGIN_DATE AND MSRC.END_DATE
AND B.ARRIVE_DATE_REOR BETWEEN MSAC.BEGIN_DATE AND MSAC.END_DATE
AND B.ARRIVE_DATE_REOR BETWEEN MSRC.BEGIN_DATE AND MSRC.END_DATE