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



我有一个这样的表:

_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_idmax(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的最新日期并筛选重复的行。

相关内容

  • 没有找到相关文章

最新更新