项目费率基于最大日期

时间:2015-05-04 14:13:00

标签: mysql

我有两个mysql表Item Rate TableItems Table现在我想从Item Rate Table获取基于最大日期的项目最新费率。 我使用以下查询,但它适用于7-01-00017-01-00027-01-0003项。如何解决此问题。

SELECT
  `itemstable`.`SALE_CODE`,
  `itemstable`.`ITEM_NAME`,
  `itemratetable`.`ITEM_RATE`
FROM
  `itemstable` 
 INNER JOIN `itemratetable` 
   ON (
    `itemstable`.`SALE_CODE` = `itemratetable`.`ITEM_CODE`
   )
WHERE `itemratetable`.`RATE_DATE` = 
 (SELECT 
   MAX(RATE_DATE) 
FROM
  `itemratetable`) ;

项目费率表

ITEM_CODE  RATE_DATE   ITEM_RATE  
---------  ----------  -----------
7-01-0001  2014-10-20  130
7-01-0002  2014-10-20  150
7-01-0002  2014-12-20  200
7-01-0003  2014-10-20  100
7-01-0003  2014-12-20  150
7-01-0004  2014-10-20  56
7-01-0004  2014-12-20  100
7-01-0005  2014-10-20  305

ITEMS TABLE

SALE_CODE  ITEM_NAME
---------  ---------
7-01-0001  Item 1
7-01-0002  Item 2
7-01-0003  Item 3
7-01-0004  Item 4
7-01-0005  Item 5

TARGET RECORDSET

SALE_CODE  ITEM_NAME    RATE_DATE   ITEM_RATE
---------  ---------    ----------- -----------
7-01-0001  Item 1       2014-10-20  130
7-01-0002  Item 2       2014-12-20  200
7-01-0003  Item 3       2014-12-20  150
7-01-0004  Item 4       2014-12-20  100
7-01-0005  Item 5       2014-10-20  305

2 个答案:

答案 0 :(得分:1)

这是标准的GROUPWISE MAX查询。标准解决方案如下。为简洁起见,我省略了另一张表。你应该能够弄明白......

SELECT x.* 
  FROM item_rate x 
  JOIN 
     ( SELECT item_code
            , MAX(rate_date) max_date 
         FROM item_rate 
        GROUP 
           BY item_code
     ) y 
    ON y.item_code = x.item_code 
   AND y.max_date = x.rate_date;

答案 1 :(得分:0)

MAX函数应该在查询的顶部使用,而不是在WHERE子句中使用:

SELECT i.sale_code, i.item_name, MAX(r.rate_date), r.item_rate FROM
  itemstable i INNER JOIN itemratetable r ON i.sale_code = r.item_code
  GROUP BY i.sale_code, i.item_name, r.item_rate;