以最小零售商ID获取物品和制造日期的唯一条目

时间:2015-08-21 13:38:48

标签: sql database postgresql greatest-n-per-group

我有一个包含这三个属性的表,比如说:

ItemID varchar(20),
RetailerID int,
ItemMfd_Date DATE

现在我想要所有这些记录,如果给定的 Item + ItemMfd_Date 有多个零售商,我们需要选择最小{{1}的行}}。

假设我们有两个属性附加,我们想要一个属性作为结果,但条件是那些记录必须有attr2 = 1

2 个答案:

答案 0 :(得分:0)

使用min聚合函数和其他两列的分组:

select ItemID, min(RetailerID) as min_RetailerID, ItemMfd_Date 
from table 
group by ItemID, ItemMfd_Date;

答案 1 :(得分:0)

DISTINCT ON最简单的方法是检索每个RetailerID最少(ItemID, ItemMfd_Date)行的一个

SELECT DISTINCT ON (ItemID, ItemMfd_Date) *
FROM   tbl
ORDER  BY ItemID, ItemMfd_Date, RetailerID;

详细说明:

对于许多重复项的发行版,其他查询样式可能会更快: