我有一张桌子:
_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.我只想显示每个项目的最高价格
答案 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的最高日期并过滤重复的行。