【问题标题】:MySQL, how can I select row based on the specific date?MySQL,如何根据特定日期选择行?
【发布时间】:2018-08-28 10:56:57
【问题描述】:

我有以下问题。有四列 Product_ID、Product_price、Start_date 和 End_date 我需要选择给定日期(1997/12/14)价格最高的产品。关键是产品ID可以在几行中保持不变,但产品在不同时间段的价格不同。我试图做这样的事情,但我得到一个空的结果:

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')

【问题讨论】:

  • 样本数据和期望的结果真的很有帮助。
  • STR_TO_DATE('1997/12/14', '%y/%m/%d') 是做什么的?

标签: mysql sql select


【解决方案1】:

我觉得你想要的逻辑更像是这样的:

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;

换句话说,您的日期比较是倒退的。一个时间段包含一个特定的日期,如果它开始于该日期或之前并结束于该日期或之后。

【讨论】:

    【解决方案2】:

    您可以使用最高价格加入

      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 
    

    【讨论】:

      【解决方案3】:

      尝试实现这一点,会给你一个预期的结果。

      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);
      

      【讨论】:

        猜你喜欢
        • 2012-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多