couchbase,为什么此查询返回零结果
我正在尝试使用此n1ql couchbase查询为给定客户选择最新创建的订单:couchbase,为什么此查询返回零结果,couchbase,n1ql,Couchbase,N1ql,我正在尝试使用此n1ql couchbase查询为给定客户选择最新创建的订单: select O1.* from `order` as O1 where O1.creationDateTime = (select max(O2.creationDateTime) from `order` O2 ) 我甚至没有得到任何结果: 从订单O2 返回此结果: [ { "$1": 1545569597891 } ] 感谢您的帮助通过添加“in”(因为结果是一个列表)和“raw”(为了
select O1.*
from `order` as O1 where
O1.creationDateTime = (select max(O2.creationDateTime) from `order` O2 )
我甚至没有得到任何结果:
从订单O2
返回此结果:
[
{
"$1": 1545569597891
}
]
感谢您的帮助通过添加“in”(因为结果是一个列表)和“raw”(为了获得文字值),我解决了这个问题:
select O1.*
from `order` as O1 where
O1.creationDateTime in (select RAW max(O2.creationDateTime) as creationDateTime from `order` O2 )
通过添加“in”(因为结果是一个列表)和“raw”(为了只获取文本值),我解决了这个问题:
select O1.*
from `order` as O1 where
O1.creationDateTime in (select RAW max(O2.creationDateTime) as creationDateTime from `order` O2 )
若你们不给出原始的子查询结果,那个么它将变成一个对象数组,而这个数组不能和值匹配。经过原始处理,它变成了一个值数组
看起来您需要具有最大creationDateTime的文档。试试这个
SELECT RAW MAX([o1.creationDateTime, o1])[1]
FROM `order` AS o1
WHERE o1.creationDateTime IS NOT NULL;
最大参数是2个元素的数组。第一个是creationDateTime,第二个是整个文档。它尝试将数组的值设为最大值,即第一个值,若有,则取第二个值。最终,它投射出第二个价值,即整个文档
这样可以避免扫描整个订单两次
如果您想要更高效的查询
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;
若你们不给出原始的子查询结果,那个么它将变成一个对象数组,而这个数组不能和值匹配。经过原始处理,它变成了一个值数组
看起来您需要具有最大creationDateTime的文档。试试这个
SELECT RAW MAX([o1.creationDateTime, o1])[1]
FROM `order` AS o1
WHERE o1.creationDateTime IS NOT NULL;
最大参数是2个元素的数组。第一个是creationDateTime,第二个是整个文档。它尝试将数组的值设为最大值,即第一个值,若有,则取第二个值。最终,它投射出第二个价值,即整个文档
这样可以避免扫描整个订单两次
如果您想要更高效的查询
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;