MySQL, как я могу выбрать строку на основе конкретной даты? - PullRequest
0 голосов
/ 28 августа 2018

У меня следующая проблема. Имея четыре столбца: Product_ID, Product_price, Start_date и End_date, мне нужно выбрать продукт с самой высокой ценой в данный день (1997/12/14). Дело в том, что идентификатор продукта может оставаться одним и тем же в нескольких строках, но цены на продукт в разные периоды времени разные. Я пытался сделать что-то вроде этого, но я получаю пустой результат:

SELECT 
Product_ID, Product_price 
FROM Products 
WHERE
Start_date >= STR_TO_DATE('1997/12/14', '%y/%m/%d')
AND 
End_date =< STR_TO_DATE('1997/12/14', '%y/%m/%d')

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

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

  select Product_ID, Product_price 
  from Products 
  inner join (
        select max(Product_price) max_price 
        from Products
        WHERE STR_TO_DATE('1997/12/14', '%y/%m/%d') between Start_date AND   End_date 
  ) t on Products.Product_price = t.max_price 
0 голосов
/ 28 августа 2018

Попробуйте реализовать это, даст вам ожидаемый результат.

select p.ID,p.Price
from product p
where '<Your Date>'<=p.EndDate AND '<Your Date>'>=p.StartDate And p.Price=(select 
max(p.Price) from product p);
0 голосов
/ 28 августа 2018

Я думаю, что логика, которую вы хотите, больше похожа на это:

SELECT p.Product_ID, p.Product_price 
FROM Products p
WHERE p.Start_date <= '1997-12-14' AND 
      p.End_date >= '1997-12-14' 
ORDER BY p.Product_price DESC
LIMIT 1;

Другими словами, ваши сравнения дат в обратном направлении. Период времени содержит определенную дату, если он начинается или предшествует этой дате и заканчивается в или после этой даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...