ここでは、サブクエリ、where's、group by'sを使ってこれを確認したいと思う人のための働くバージョンです。
このクエリは、1日のスパンに対するユーザーのアイテムコストの変化を調べ、「昨日」のすべての結果を取得します。その日のすべての変更を1つのascと1つのdescにリストし、そのように価格の変化を比較します。もし彼らが一番古い変化からそれが新しい変化に変わった場合、それは免除されます。
SELECT
us.Name,
it.Name,
pal.CS_PA_Line_Supplier__c as supplier_name,
newest.NewValue as new_value,
oldest.OldValue as old_value,
((newest.NewValue - oldest.OldValue)/oldest.OldValue) * 100 as Percentage
FROM
(
SELECT Id, Name, KNDY4__Item__c, CS_PA_Line_Supplier__c
FROM KNDY4__Contract_Line__c
) pal
LEFT JOIN
(
SELECT *
FROM
(
SELECT
ParentId,
CreatedById,
CreatedDate,
Field,
NewValue
FROM KNDY4__Contract_Line__History
WHERE CreatedDate >= CURDATE() - INTERVAL 1 DAY
AND CreatedDate < CURDATE()
AND Field='KNDY4__Negotiated_Price__c'
ORDER BY CreatedDate DESC
) cd
GROUP BY ParentId
) newest
ON newest.ParentId=pal.Id
LEFT JOIN
(
SELECT * FROM (
SELECT
ParentId,
OldValue
FROM KNDY4__Contract_Line__History
WHERE CreatedDate >= CURDATE() - INTERVAL 1 DAY
AND CreatedDate < CURDATE()
AND Field='KNDY4__Negotiated_Price__c'
ORDER BY CreatedDate ASC
) cd
GROUP BY ParentId
) oldest
ON oldest.ParentId=pal.Id
LEFT JOIN
(
SELECT Id, Name
FROM User
) us
ON us.Id = newest.CreatedById
LEFT JOIN
(
SELECT Id,Name
FROM KNDY4__Item__c
) it
ON it.Id=pal.KNDY4__Item__c
WHERE newest.ParentId IS NOT NULL
AND oldest.OldValue IS NOT NULL
AND newest.NewValue != oldest.OldValue
GROUP BY pal.KNDY4__Item__c, pal.CS_PA_Line_Supplier__c
ORDER BY it.Name ASC
行ごとに一意のIDがありますか?青い帽子の前のドットは間違いでしかないのですか?開始日と終了日の価格を調べるために、1日あたりの変更数をテーブルに表示しますか? –
製品に加えられた変更ごとに固有のIDがあり、両方の製品が共有するParentIDがあります。 – mburgSolar
1日に何回変更が行われたのか分かりませんが、価格変更を追跡し始めたばかりですが、1回のレコード変更につき、ユーザーがミスをして元に戻した場合は2回以下にする必要があります。何度か? – mburgSolar