子查询返回多个值

More than one value returned by subquery

我有一个 return 不止一个 value.Please 的子查询,请参阅下面的查询。对于给定的客户和日期,可能存在多个订单。在那种情况下,我只想 return 一个订单(这听起来可能很奇怪,但这就是我想要完成的)。我如何设置该限制?我试图在子查询中设置 limit 1 但我没能成功?

有什么想法吗?

我正在使用 Teradata

SELECT Person.name, 
(SELECT order FROM ORDER where
ORDER.name=Person.name AND
ORDER.date=(SELECT MAX(date) FROM ORDER WHERE ORDER.name=Person.name))order
FROM Person 
SELECT p.name, (SELECT MAX(o.order)
                FROM ORDER o 
                WHERE o.name = p.name 
                AND o.date= (SELECT MAX(o.date) 
                             FROM ORDER o
                             WHERE o.name = p.name))
FROM Person p

您可以使用子查询中的 Top 1 MAX(date),像这样

SELECT Person.name, 
(SELECT order FROM ORDER where
ORDER.name=Person.name AND
ORDER.date=(SELECT TOP 1 MAX(date) FROM ORDER WHERE ORDER.name=Person.name))order
FROM Person

在我的评论中,答案如下:

SELECT Person.name, 
       (SELECT MAX(order) FROM ORDER
        where ORDER.name = Person.name
          AND ORDER.date = (SELECT MAX(date) FROM ORDER
                            WHERE ORDER.name = Person.name)) order
FROM Person

请注意,ORDERDATE 都是 ANSI SQL 中的保留字。我建议您将它们双引号以避免将来出现问题并提高可移植性。 (例如 "ORDER"。)

使用 ROW_NUMBER 查找每个名称的最新订单,然后加入它:

SELECT
   Person.name, 
   ORDER.order
FROM Person AS p 
LEFT JOIN 
 (
   SELECT * 
   FROM ORDER
   QUALIFY ROW_NUMBER() OVER (PARTITION BY name ORDER BY date DESC) = 1
 ) as o
ON ORDER.name=Person.name

顺便说一句,这比嵌套 MAX 的性能要好得多。而且写起来更容易:-)