为每个项目的最大日期选择所有列

时间:2016-08-11 07:01:30

标签: mysql datetime

我有一张桌子:

_id INT AUTO_INCREMENT
itemID INT
price DECIMAL
priceDate DATETIME

每个itemID可以在不同日期设置不同的价格(因此我可以及时跟踪价格变化)

但是,我很困惑如何检索每个项目的当前价格,同时避免重复(即,对于每个项目,获取每个最大日期的所有列)。

一些示例数据:

_id itemID price pricedate
1   1   50.00   2016-06-14 00:00:00
2   2   50.00   2016-06-14 00:00:00
3   3   85.00   2016-06-14 00:00:00
4   4   95.00   2016-06-14 00:00:00
...
120 1   1000.00 2016-08-11 12:41:13

预期产出:

_id itemID price pricedate
2   2   50.00   2016-06-14 00:00:00
3   3   85.00   2016-06-14 00:00:00
4   4   95.00   2016-06-14 00:00:00
120 1   1000.00 2016-08-11 12:41:13

请注意,itemID为1有两个条目。最近价格从50变为1000.我只想显示每个项目的最高价格

2 个答案:

答案 0 :(得分:1)

试试这个。但是,如果多于1个项目具有相同的pricedate,则结果可能不明确。不幸的是MySQL没有partition by条款,所以你必须得到它或者采用另一种方法。

select t.* from your_table t
inner join 
(select item_id,max(pricedate) as pricedate 
    from your_table 
group by item_id
) d
on t.item_id=d.item_id and t.priceDate=d.priceDate

说明:内部查询为您item_id提供了每个max(priceDate)itemid。但是你不会得到与这一行对应的其他列。因此,您将再次使用父表并基于这两个派生列进行连接。希望很清楚。

答案 1 :(得分:0)

Select foo._id,foo.itemID,foo.price,foo.priceDate 
from foo 
inner join 
    (select itemID,max(priceDate) as tp from foo group by itemID) maxD on (foo.itemID=maxD.itemID and foo.priceDate=maxD.tp)

内连接中的子查询获取itemID的最高日期并过滤重复的行。