Как перезапустить позицию при изменении значения даты? - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть таблица с количеством продаж моего товара, я хотел бы получить заказ на количество продаж по дням.Проблема с моим фактическим запросом, у меня есть только общая позиция.Я хотел бы, чтобы позиция начиналась с 1 при каждом изменении даты.

Мне нужно это для более крупного запроса, чтобы определить спрос на продукты.

SELECT (@pos := @pos+1) pos,`sale_qty`, Date, post_id 
FROM `sale_qty` S, (SELECT @pos := 0) p 
ORDER BY `Date`ASC ,`sale_qty` ASC

Это то, что у меня есть:

   pos  | sale_qty |    Date    | post_id
--------|----------|------------|--------
    1   |     0    | 2019-01-28 | 25077
    2   |     15   | 2019-01-28 | 25479
    3   |     0    | 2019-01-29 | 2077
    4   |     8    | 2019-01-29 | 25923
    5   |     13   | 2019-01-29 | 25892
    6   |     2    | 2019-01-30 | 2910

И что я хочу:

   pos  | sale_qty |    Date    | post_id
--------|----------|------------|--------
    1   |     0    | 2019-01-28 | 25077
    2   |     15   | 2019-01-28 | 25479
    1   |     0    | 2019-01-29 | 2077
    2   |     8    | 2019-01-29 | 25923
    3   |     13   | 2019-01-29 | 25892
    1   |     2    | 2019-01-30 | 2910

1 Ответ

0 голосов
/ 17 февраля 2019

Вы можете использовать переменные, но вам нужно запомнить значение date:

SELECT (@pos := if(@d = date, @pos + 1,
                   if(@d := date, 1, 1)
                  )
       ) as pos,
       `sale_qty`, Date, post_id 
FROM (SELECT s.*
      FROM `sale_qty` s
      ORDER BY `Date`ASC, `sale_qty` ASC
     ) s CROSS JOIN
     (SELECT @d := '', @pos := 0) p ;

Или проще в MySQL 8+,

SELECT row_number() over (partition by date order by sale_qty) as pos
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...