Ich arbeite mit der folgenden Abfrage:Aggregieren Timestamp
SELECT contract,
source_ref1 AS "ORDER_NO",
part_no,
ifsapp.inventory_part_api.Get_description(contract, part_no) as "DESCRIPTION",
ifsapp.inventory_part_api.Get_unit_meas(contract, part_no) as "UNIT_MEAS",
date_applied,
(SELECT work_center_no FROM shop_order_operation where inventory_transaction_hist2.source_ref1 = shop_order_operation.order_no) AS "WORK_CENTER",
direction,
SUM(quantity) AS "QUANTITY",
(CASE
WHEN ((To_char(date_time_created, 'HH24:MI ') BETWEEN '05:45 ' AND '17:44') AND
date_applied = date_created) THEN 'SHIFT1'
WHEN (((To_char(date_time_created, 'HH24:MI') BETWEEN '17:45' AND '24:00') OR
(To_char(date_time_created, 'HH24:MI') BETWEEN '00:00' AND '05:44') AND
date_applied = date_created)) THEN 'SHIFT2'
ELSE 'MANUAL_ADJUST'
END) AS "SHIFT"
FROM ifsapp.INVENTORY_TRANSACTION_HIST2
WHERE part_no IN (select pc.part_no from ifsapp.HH_INV_PART_CHARS pc where pc.accounting_group = '400') AND
contract IN ('DE1', 'DE2') AND
transaction_code LIKE '%REC%' AND
direction IN ('+', '-') AND
source_ref_type = 'Shop Order' AND
To_char(date_applied, 'YYYY-MM-DD') BETWEEN '2017-01-01' AND '2017-12-26'
GROUP BY contract,source_ref1, part_no, ifsapp.inventory_part_api.Get_description(contract, part_no),
ifsapp.inventory_part_api.Get_unit_meas(contract, part_no), location_no, date_applied, direction,
date_time_created, date_created
ORDER BY date_applied
Diese Abfrage liefert 18.292 Treffer.
Wenn ich die CASE-Anweisung entfernen und DATE_TIME_CREATED und DATE_CREATED im Abschnitt GROUP BY entfernen, gibt die Abfrage 1356 Treffer zurück.
Wir verwenden die CASE-Anweisung, um festzustellen, welche Verschiebung unser Produkt erzeugt hat. Das Feld date_time_created ist grundsätzlich ein Zeitstempel. Es ist das einzige Feld auf dieser Tabelle, mit dem wir feststellen können, welche Verschiebung das Produkt erzeugt hat.
Aber es führt auch dazu, dass wir 10x so viele Treffer bekommen, wie wir ohne es würden.
Nehmen Sie ORDER_NO 349321 als Beispiel. Wenn ich die Abfrage wie gezeigt abspiele, erhalte ich 61 Treffer. Wenn Sie die CASE-Anweisung entfernen und DATE_TIME_CREATED und DATE_CREATED aus dem GROUP BY-Abschnitt entfernen, erhalte ich zwei Treffer.
Wir haben keine Aufträge über zwei Schichten abgeschlossen. Also muss ich den Zeitstempel für jede Transaktion für ORDER_NO 349321 nicht kennen, und ich muss nicht wissen, ob jeder Zeitstempel in Shift 1 oder Shift 2 ist. Ich muss nur wissen, ob Transaktionen für diesen Auftrag waren in Shift 1 oder Shift 2 abgeschlossen.
Gibt es eine Möglichkeit, die Informationen, die ich von dieser Fallanweisung bekomme, zu aggregieren, um dies auszuarbeiten? Ich habe versucht, MAX und AVG in meiner Case-Anweisung zu verwenden, aber es gibt die gleiche Anzahl an Ergebnissen zurück.
Geben Sie repräsentative Daten und das gewünschte Ergebnis an. –
Wenn Sie es nicht absichtlich gemacht haben, sieht es so aus, als würden Sie in der "SHIFT 2" -Berechnung einen Satz Klammern um die OR-Bedingung verfehlen. Wie es jetzt ist, werden die "UND" -Bedingungen nicht als "ANDs" behandelt, da das OR nicht mit einer anderen Bedingung verknüpft ist. '( \t ( \t \t (TO_CHAR (date_time_created 'HH24: MI') zwischen '17: 45' und '24: 00') oder \t \t (TO_CHAR (date_time_created 'HH24: MI') zwischen '00: 00' AND '05: 44') und \t date_applied = date_created \t) ) ' Dies gilt nicht Ihr ursprüngliches Problem beheben, aber jetzt zu etwas zu beachten. – ravioli