2016-11-14 2 views
3

Ich habe die folgende Abfrage:Wie optimieren Sie die Leistung von SerialNumbers durch SalesInvoicesExploded?

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 

Wie kann ich die Seriennummern erst ab dem Zeitpunkt Bereich bekommen? Im Debugger sehe ich viele Anfragen an Exact Online.

+1

Hallo Frank. Können Sie erklären, was mit Ihrer Aussage falsch läuft? –

+0

Wie bekomme ich die Seriennummern nur aus dem Datumsbereich, im debuger sehe ich viele Anfragen an Exact Online. –

+0

Bitte beachten Sie, dass Sie den falschen zwei Spalten in 'gdlsn.salesorderlineid = sie.silid' beitreten. Auf der linken Seite befindet sich eine ID des Kundenauftrags, auf der rechten Seite die ID einer Rechnung für die Rechnung. –

Antwort

1

Vorerst gibt es keine sehr gute Filtermöglichkeit, um das gewünschte Ergebnis zu erzielen.

Das Problem besteht darin, dass es keine Möglichkeit gibt, den Filter gdlsn.salesorderlineid = sie.silid für den Datensatz auszuführen, sofern die Datensätze nicht von der anderen Seite abgerufen wurden.

Nur bestimmte Filter werden serverseitig ausgeführt (wie Ihre invoicedate >= '2016-01-01'). Dies ist eine ziemlich harte Nuss, die von der Programmseite zu knacken ist.

Es würde funktionieren, wenn Sie einen Filter angeben können, der vorher bestimmt werden kann, so dass das Datum in GoodsDeliveryLineSerialNumbers.Created immer nach invoicedate kommt. Es würde eine wesentliche Leistungsverbesserung bedeuten, wenn Sie den Satz basierend auf diesem Datum eingrenzen können.

Ich schlage vor, so etwas zu verwenden, wenn möglich:

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

Ich habe die Abfrage ausgeführt, aber keine Ergebnisse, alle GoodsDeliveryLineSerialNumbers werden abgerufen, aber keine Übereinstimmung. Ist der Schlüssel richtig? –

+0

Ich denke, der willkürliche Filter 'gdlsn.created> = '2016-01-01'' brachte keine Ergebnisse. Ich kann nicht mit Sicherheit sagen, dass dies zu den oben genannten Ergebnissen führen wird. Gibt es ein Datum, von dem Sie sicher wissen, dass Sie es als Filter hinzufügen können? –

+0

Die Abfrage liefert immer noch keine Ergebnisse. Ich habe den Zeitraum geändert in: wo.invoicedate> = '2016-01-01' und sie.invoicedate <'2016-02-01' - füge folgende Zeile hinzu: und gdlsn.created> = ' 2016-01-01 ' –

Verwandte Themen