我正在尝试使用此n1ql沙发式查询为给定客户选择最新创建的订单:
select O1.*
from `order` as O1 where
O1.creationDateTime = (select max(O2.creationDateTime) from `order` O2 )
我什至都没有结果:
select max(O2.creationDateTime) from
订单O2
返回此结果:
[
{
"$1": 1545569597891
}
]
感谢您的帮助
答案 0 :(得分:2)
通过在“ raw”中添加“ in”(因为结果是列表)(为了得到字面值),我解决了这个问题:
select O1.*
from `order` as O1 where
O1.creationDateTime in (select RAW max(O2.creationDateTime) as creationDateTime from `order` O2 )
答案 1 :(得分:2)
如果不给出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;