Я пытаюсь использовать разные вещи для получения данных в нужном формате, но безрезультатно. Мне нужно объединить 3 таблицы, которые показывают все из 1 таблицы, и добавить дополнительный столбец, который показывает самое последнее значение из таблицы 2, но учтите условие из таблицы 3. Отображение таблиц будет иметь больше смысла ... I ' упростили таблицы. Так вот таблица WorkOrder:Как получить самые последние значения в SQL на основе условия
workorderid wonum siteid
1000 5000 SITE1
1001 5001 SITE1
1002 5002 SITE1
1003 5003 SITE1
1004 5000 SITE2
1005 5001 SITE2
1006 5002 SITE2
1007 5004 SITE1
мне нужно использовать wonum и siteid, чтобы получить pay_value - но может быть несколько платежей для каждого заказа работы. Мне нужно получить самый последний платеж, когда платеж не был отменен. К сожалению, это содержится в таблице purchase_req. Это таблица payment_wos
wonum_ref siteid pay_numref pay_value
5000 SITE1 12345 1000.00
5001 SITE1 12345 1023.52
5002 SITE1 12346 52.32
5003 SITE1 12347 452.12
5000 SITE2 12348 154.21
5000 SITE1 12347 852.25
5001 SITE2 12350 953.86
5002 SITE2 12349 587.78
purchase_req стол:
pay_num siteid status sent_date
12345 SITE1 CANCEL 2015-11-02 15:00
12346 SITE1 SENT 2015-11-03 13:00
12347 SITE1 SENT 2015-11-04 12:00
12348 SITE2 APPROVED 2015-11-04 15:00
12349 SITE2 CANCEL 2015-11-05 11:00
12350 SITE2 SENT 2015-11-06 15:00
Таким образом, для примера данных, приведенных, мне нужно, чтобы получить результат ниже:
workorderid wonum siteid pay_value
1000 5000 SITE1 852.25
1001 5001 SITE1 NULL
1002 5002 SITE1 52.32
1003 5003 SITE1 452.12
1004 5000 SITE2 154.12
1005 5001 SITE2 953.86
1006 5002 SITE2 NULL
1007 5004 SITE1 NULL
Так, например WorkorderID 1001 показывая pay_value как NULL, поскольку последний платеж находится в статусе «ОТМЕНА». Также, например, workorderid 1007 показывает значение pay_value как NULL, а также нет оплаты за него. С моей попыткой ниже это показывает только заказы на работу, где есть оплата. Если я настрою предложение where так, чтобы вместо pr.status не был включен ('CANCEL') , он говорит (pr.status не в (CANCEL) или pr.status имеет значение null) Затем это показывает все заказы на работу за исключением тех, где каждый платеж находится в состоянии «ОТМЕНА». Мне нужно, чтобы он показывал каждый рабочий заказ: S. Любая помощь будет высоко оценена. SQL ниже:
;with
Pay_Per_WO
AS
(
select w.workorderid, w.wonum, p.wonumref, w.siteid as wsiteid, p.siteid as psiteid, p.pay_numref, p.pay_value, w.siteid, pr.sent_date, pr.status, pr.siteid as prsiteid, pr.pay_num
,ROW_NUMBER() OVER(PARTITION BY w.workorderid order by MAX(pr.sent_date) Desc) payorder
from workorder w
left join payment_wos p
on w.wonum = p.wonumref and w.siteid = p.siteid
left join pr
on p.pay_numref = pr.pay_num and p.siteid = pr.siteid
where
pr.status not in ('CANCEL')
group by w.workorderid, w.wonum, p.wonumref, w.siteid, p.siteid, p.pay_numref, p.pay_value, w.siteid, pr.sent_date, pr.status, pr.siteid, pr.pay_num
)
,
Pay_Calc
AS
(
Select
a.workorderid, a.wonum, a.siteid, a.pay_value
from Pay_Per_WO a
WHERE a.payorder = 1
group by a.workorderid, a.wonum, a.siteid, a.pay_value
)
select * from Pay_Calc
Пожалуйста, помечать вопрос с базой данных, которую вы используете. –