Использование пользовательской переменной var для хранения max (date) и последующего использования в предложении - PullRequest
0 голосов
/ 01 апреля 2019

Мне нужно получить только последние изменения цен на конкретные продукты.

  • Я вернул все записи об изменениях цен для определенных продуктов, сгруппированных по названию продукта
  • Я сохраняю максимальную дату изменения цены в определяемой пользователем переменной
  • Я сравниваю поле, в котором хранится дата изменения цены, с переменной var в предложении has, чтобы получить последнее изменение цены

Но я просто получаю 0 возвращаемых строк

         SELECT  
            pr.product_id
            ,pr.price set_price
            ,pr.start_date -- the timestamp of price change
            ,date(max(pr.start_date))
            ,@'max_change' := max(pr.start_date)

        FROM prices pr

        where product_id in ( -- get the id's of specific products
                            ....                
            )

        group by pr.product_id

        having date(pr.start_date) = date(@max_change)

1 Ответ

2 голосов
/ 01 апреля 2019

Вы можете использовать для этого коррелированный подзапрос, например

drop table if exists member_token;
create Table member_token
(memberProfileId  int,createdAt date);

insert into member_token values
(1,'2019-01-01'),(1,'2019-01-01'),
(2,'2019-01-01'),(3,'2019-01-01'),
(1,'2019-01-02'),(2,'2019-01-02'),
(1,'2019-01-04'),(3,'2019-01-04');


select mt.*
from member_token mt
where createdat = 
(
select max(createdat)
from member_token mt1
where mt.memberprofileid = mt1.memberprofileid) 
order by memberprofileid
;

+-----------------+------------+
| memberProfileId | createdAt  |
+-----------------+------------+
|               1 | 2019-01-04 |
|               2 | 2019-01-02 |
|               3 | 2019-01-04 |
+-----------------+------------+
3 rows in set (0.00 sec)
...