3

我有以下查询:

select  sie.invoicedate         sie_invoicedate
,       sie.Silitem             sle_item
,       sie.Silitemcode         sle_itemcode
,       sie.Silitemdescription  sle_itemdescription
,       sie.Silnetprice         sle_netprice
,       sie.Silquantity         sle_quantity
,       sie.Silunitprice        sle_unitprice
,       ctr.ctr_code            ctr_code
,       ctr.ctr_name            ctr_name
,       ctr.parent_code         parent_code
,       ctr.parent_name         parent_name
,       gdlsn.ssrserialnumber   serialnumber
from    SalesInvoicesExploded sie
join    customers@inmemorystorage ctr
on      ctr.ctr_id = sie.invoiceto
join    GoodsDeliveryLineSerialNumbers gdlsn
on      gdlsn.salesorderlineid = sie.silid
where   sie.invoicedate >= '2016-01-01'
and     sie.invoicedate < '2016-01-03'
order
by      sie.invoicedate

如何仅从日期范围中获取序列号?在调试器中,我看到很多对 Exact Online 的请求。

4

1 回答 1

1

目前,没有一个很好的过滤器可以得到你想要的结果。

问题是没有办法对gdlsn.salesorderlineid = sie.silid数据集执行过滤,除非数据集是从另一端获取的。

只有特定的过滤器在服务器端执行(比如你的invoicedate >= '2016-01-01')。从程序方面来说,这是一个很难破解的问题。

如果您可以指定一个可以预先确定的过滤器,它将起作用,例如日期GoodsDeliveryLineSerialNumbers.Created总是在invoicedate. 如果您可以根据该日期缩小集合范围,这将意味着显着的性能改进。

如果可能的话,我建议使用这样的东西:

select  sie.invoicedate         sie_invoicedate
,       sie.Silitem             sle_item
,       sie.Silitemcode         sle_itemcode
,       sie.Silitemdescription  sle_itemdescription
,       sie.Silnetprice         sle_netprice
,       sie.Silquantity         sle_quantity
,       sie.Silunitprice        sle_unitprice
,       ctr.ctr_code            ctr_code
,       ctr.ctr_name            ctr_name
,       ctr.parent_code         parent_code
,       ctr.parent_name         parent_name
,       gdlsn.ssrserialnumber   serialnumber
from    SalesInvoicesExploded     sie
join    customers@inmemorystorage ctr
on      ctr.ctr_id = sie.invoiceto
join    GoodsDeliveryLineSerialNumbers gdlsn
on      gdlsn.salesorderlineid = sie.silid
where   sie.invoicedate >= '2016-01-01'
and     sie.invoicedate < '2016-01-03'
-- add the following line, use a date that for sure will yield the rows:
and     gdlsn.created >= '2015-12-01'
--
order
by      sie.invoicedate
于 2016-11-14T11:51:36.457 回答