2016-11-14 7 views
3

私は、次のクエリがあります:私は唯一の日付範囲からシリアル番号を取得できますかSalesInvoicesExplodedでSerialNumbersのパフォーマンスを最適化する方法は?

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 [email protected] 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に多くのリクエストがあります。

+1

こんにちはフランク。あなたの声明に間違っていることを説明できますか? –

+0

どのようにして、日付範囲からのみシリアルナンバーを得ることができますか?デバッガでは、厳密なオンラインへのリクエストがたくさんあります。 –

+0

'gdlsn.salesorderlineid = sie.silid'の間違った2つの列に参加していることに注意してください。左側は販売注文ラインID、右側は販売請求書ラインIDです。 –

答えて

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 [email protected] 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 
+0

私はクエリを実行しましたが、結果はありません。すべてのGoodsDeliveryLineSerialNumbersが取得されますが、一致しません。キーは無音ですか? –

+0

私は、任意のフィルタ 'gdlsn.created> = '2016-01-01'は結果を出さなかったと思います。上記のように期待される結果が得られるかどうかは確かではありません。フィルタとして追加できることを確実に知っている日付はありますか? –

+0

クエリでは結果が得られません。私は日付範囲を次のように変更しました:sie.invoicedate> = '2016-01-01' とsie.invoicedate <'2016-02-01' - 次の行を追加してください: とgdlsn.created> = ' 2016-01-01 ' –

関連する問題