我有一个这样的表:
_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。我只想显示每个商品的最高价格日期
试试这个。但如果不止一个项目具有相同的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
说明:内部查询为该itemid
提供每个item_id
和max(priceDate)
。但是您将不会得到与此行相对应的其他列。因此,您将再次使用父表,并基于这两个派生列进行联接。希望它是清楚的。
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的最新日期并筛选重复的行。