couchbase,为什么这个查询 return 零结果
couchbase, Why this query return zero result
我正在尝试 select 使用此 n1ql couchbase 查询为给定客户创建的最新订单:
select O1.*
from `order` as O1 where
O1.creationDateTime = (select max(O2.creationDateTime) from `order` O2 )
我什至都没有结果:
select max(O2.creationDateTime) from
订单O2
return 这个结果:
[
{
"": 1545569597891
}
]
感谢您的帮助
通过添加 'in'(因为结果是一个列表)和 'raw'(为了得到字面值)我解决了它:
select O1.*
from `order` as O1 where
O1.creationDateTime in (select RAW max(O2.creationDateTime) as creationDateTime from `order` O2 )
如果您不提供 RAW 子查询结果,则会变成无法与值匹配的对象数组。通过使用 RAW,它变成了值数组。
您似乎需要具有最长 creationDateTime 的文档。试试这个。
SELECT RAW MAX([o1.creationDateTime, o1])[1]
FROM `order` AS o1
WHERE o1.creationDateTime IS NOT NULL;
MAX 参数是 2 个元素的 ARRY。第一个是 creationDateTime,第二个是整个文档。它尝试 ARRAY 的最大值,即第一个值,如果有关系则第二个值。最终它投射出第二个值,即整个文档。
这避免了两次扫描整个订单。
如果你想要更高效的查询。
Use Index Order.
CREATE INDEX ix1 ON `order`(creationDateTime DESC);
SELECT RAW o1
FROM `order` AS o1
WHERE o1.creationDateTime IS NOT NULL
ORDER BY o1.creationDateTime DESC LIMIT 1;
OR
Use Covered query decide which document key qualifies and then Fetch that document only.
SELECT o.* FROM (
SELECT RAW MAX([o1.creationDateTime, META(o1).id])[1]
FROM `order` AS o1
WHERE o1.creationDateTime IS NOT NULL) AS o1
JOIN `order` AS o ON KEYS o1;
我正在尝试 select 使用此 n1ql couchbase 查询为给定客户创建的最新订单:
select O1.*
from `order` as O1 where
O1.creationDateTime = (select max(O2.creationDateTime) from `order` O2 )
我什至都没有结果:
select max(O2.creationDateTime) from
订单O2
return 这个结果:
[
{
"": 1545569597891
}
]
感谢您的帮助
通过添加 'in'(因为结果是一个列表)和 'raw'(为了得到字面值)我解决了它:
select O1.*
from `order` as O1 where
O1.creationDateTime in (select RAW max(O2.creationDateTime) as creationDateTime from `order` O2 )
如果您不提供 RAW 子查询结果,则会变成无法与值匹配的对象数组。通过使用 RAW,它变成了值数组。
您似乎需要具有最长 creationDateTime 的文档。试试这个。
SELECT RAW MAX([o1.creationDateTime, o1])[1]
FROM `order` AS o1
WHERE o1.creationDateTime IS NOT NULL;
MAX 参数是 2 个元素的 ARRY。第一个是 creationDateTime,第二个是整个文档。它尝试 ARRAY 的最大值,即第一个值,如果有关系则第二个值。最终它投射出第二个值,即整个文档。
这避免了两次扫描整个订单。
如果你想要更高效的查询。
Use Index Order.
CREATE INDEX ix1 ON `order`(creationDateTime DESC);
SELECT RAW o1
FROM `order` AS o1
WHERE o1.creationDateTime IS NOT NULL
ORDER BY o1.creationDateTime DESC LIMIT 1;
OR
Use Covered query decide which document key qualifies and then Fetch that document only.
SELECT o.* FROM (
SELECT RAW MAX([o1.creationDateTime, META(o1).id])[1]
FROM `order` AS o1
WHERE o1.creationDateTime IS NOT NULL) AS o1
JOIN `order` AS o ON KEYS o1;