Как ссылаться на другую строку, когда у вас есть совместный ключ в MySQL Workbench? - PullRequest
0 голосов
/ 03 июля 2019

мой код в MySQL Workbench

SELECT
id,
user_id,
parent_id,
approved_time,
@new_approved_t:=IF(new_product_type != 'B', approved_time, @new_approved_t))AS new_approved_time
FROM p

мой фрейм данных выглядит следующим образом после запуска кода:

id  user_id  parent_id     product_type  approved_time   New_approved_time
30    11            NA       A            8/4/2017         8/4/2017
31    11            30       B            12/1/2017        8/4/2017
54    5             NA       A            5/5/2018         5/5/2018
322   5             54       B            7/22/2018        5/5/2018
21    5             NA       C            8/1/2018         8/1/2018
13    5             NA       C            8/2/2018         8/2/2018
2445  5             NA       C            9/25/2018        9/25/2018
111   44            NA       A            10/4/2018        10/4/2018
287   44            111      B            10/8/2018        10/4/2018
211   33            NA       A            12/5/2018        12/5/2018
277   33            211      B            12/25/2018       12/5/2018
1120  33            NA       C            1/1/2019         1/1/2019
1389  33            211      B            1/11/2019        1/1/2019

Я бы хотел, чтобы все мои product_type, оканчивающиеся на 'B', и столбец new_approved_time использовали соответствующее время, утвержденное parent_id. Результат должен выглядеть примерно так:

id  user_id  parent_id     product_type  approved_time   New_approved_time
30    11            NA       A            8/4/2017         8/4/2017
31    11            30       B            12/1/2017        8/4/2017
54    5             NA       A            5/5/2018         5/5/2018
322   5             54       B            7/22/2018        5/5/2018
21    5             NA       C            8/1/2018         8/1/2018
13    5             NA       C            8/2/2018         8/2/2018
2445  5             NA       C            9/25/2018        9/25/2018
111   44            NA       A            10/4/2018        10/4/2018
287   44            111      B            10/8/2018        10/4/2018
211   33            NA       A            12/5/2018        12/5/2018
277   33            211      B            12/25/2018       12/5/2018
1120  33            NA       C            1/1/2019         1/1/2019
1389  33            211      B            1/11/2019        12/5/2018    <-this is where I dont know how to write my code

Спасибо!

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Нашел решение здесь с другим столбцом, который я не включил в мой пример, но в основном это обратный столбец parent_id, который я перечислил выше, в котором указан только id в product_type A, а остальные - нулевые.

Но я получил подсказку из кода Дэна о функции COALESCE (), спасибо Дэну.

CASE WHEN c.new_product_type IN ('A', 'B') THEN @new_approved_t:=IF(COALESCE(if((a.is_loc=1 AND b.ploc_RID IS NOT NULL), a.id, null)), a.approved_time, @new_approved_t)
          ELSE a.approved_time END AS new_approved_time
0 голосов
/ 03 июля 2019

Поскольку у родителя (pp) есть свое собственное значение, необходимо подобное самоподсоединение. Из-за критериев объединения pp.approved_time будет NULL для продуктов, не относящихся к B.

SELECT
p.id,
p.user_id,
p.parent_id,
p.approved_time,
COALESCE(pp.approved_time, p.approved_time) AS new_approved_time
FROM p
LEFT JOIN p AS pp ON p.new_product_type = 'B' AND p.parent_id = pp.id
...