Как мне сделать алгоритм для расстановки приоритетов по дате и / или источнику? - PullRequest
0 голосов
/ 13 октября 2019

Я немного застрял с этим алгоритмом, который я должен сделать в SQL. У меня есть в таблице коды продуктов, название продукта, поставщик и дата обновления продукта. Мне нужно расставить приоритеты продуктов по поставщику и дате, в зависимости от обстоятельств. Например, если у продукта 1,2 и / или 3 в качестве поставщика, должен быть выбран продукт с самой высокой частотой обновления. Но если у продукта есть поставщик 4, 5 и / или 6, должен быть выбран продукт с наименьшим номером поставщика.

Сделайте этот запрос, который находится в курсоре, если запрос больше или равенДля 1 данных первые данные в строке вставляются в другую таблицу. Это то, что у меня на данный момент

    SELECT @QUERY = count (*)  from (
SELECT TOP 1 
   code_product,update_date,supplier,name_product 
FROM Product_updates
WHERE ( supplier = 1 OR supplier =2 OR supplier = 3 ) and code_product 
    = @code_product and code_product is not null 
order by  update_date DESC 
) a 

Практический пример, вот таблица

    code_product    name_product    supplier    update_date
    1313                   A            1       11-03-2019
    1313                   A            3       12-10-2019
    1313                   A            2       11-10-2019
    1313                   A            6       13-10-2019
    1515                   B            5       13-10-2019
    1515                   B            4       13-02-2018
    1515                   B            6       15-04-2019

и ожидаемый результат

    code_product    name_product    supplier    update_date
    1313                 A               3        12-10-2019
    1515                 B               4        13-02-2018

Пожалуйста, помогите, С уважением.

Ответы [ 2 ]

0 голосов
/ 13 октября 2019

Вы можете сделать несколько манипуляций со значениями поставщика через случай

    Select code_product, name_product, 
      Case when 1 =max(Case 
      when 
              supplier in 
          (1,2,3) 
        then 1
         else 2 end) then max(date) 
        Else min(date) end
      from table group by code_product, 
      name_product, (Case when 1 
         =max(Case 
            when 
              supplier in 
          (1,2,3)
        then 1
         else 2 end) then max(date) 
        Else min(date) end) 
0 голосов
/ 13 октября 2019

Вы бы использовали row_number() для расстановки приоритетов:

select pu.*
from (select pu.*,
             row_number() over (partition by code_product
                                order by (case when supplier in (1, 2, 3) then update_date desc,
                                         update_date asc
                               ) as seqnum
      from product_updates pu
     ) pu
where seqnum = 1;
...