避免重复计算 - 只计算 table 中的第一次出现
Avoid double counting - only count first occurrence in table
我正在尝试按月计算库存中出现的商品总数(序列号)。
这通常可以用 distinct 轻松解决,但是,我只想计算它是否是第一次出现(第一次插入)。
这个查询让我了解了大部分内容。
select date_trunc (‘month’,date) as Date,productid, count(distinct serialnumber) from inventory
where date_trunc(‘month’,date)>= ‘2016-01-01’ and productID in ('1','2') and status = ‘INSERT’
group by date_trunc(‘month’,date), productid
order by date_trunc(‘month’,date) desc
但我意识到我正在 double/triple/quadruple 计算一些序列号,因为一件物品在其生命周期中可能会多次重新出现在我们的库存中。
上面的查询涵盖了这些场景,因为序列号只出现一次:
- 显示为新的
- 如旧显示
以下是我意识到我可能正在 double/triple/quadruple 计数的用例:
- 显示为新品,然后又恢复原样(不限制使用次数)
- 显示为已用,然后再次显示为已用(不限制显示已用的次数)
这是我 运行 的一个例子。
(注意:我添加了条件列以更好地说明这一点)。但特定序列号已入库三次(第一次是新的,然后是两次使用过的)
Date
ProductID
Count
Condition
7-1-21
1
1
u
11-1-18
1
1
u
2-1-17
1
1
n
在我当前的查询结果中,每次插入都会被计算在内(2017 年 2 月一次,2018 年 11 月一次,2021 年 7 月一次)。
我如何修改我的查询以确保我只计算第一个实例(插入)特定序列号出现在库存中 table?
在子查询中,使用 min
聚合函数仅计算每个 product/item 的首次插入日期。然后计算该结果的项目:
select Date, productid, count(serialnumber)
from (
select min(date_trunc(‘month’,date)) as Date, productid, serialnumber
from inventory
where date_trunc(‘month’,date) >= ‘2016-01-01’
and productID in ('1','2')
and status = ‘INSERT’
group by productid, serialnumber
) x
group by Date, productid
order by Date desc;
我正在尝试按月计算库存中出现的商品总数(序列号)。
这通常可以用 distinct 轻松解决,但是,我只想计算它是否是第一次出现(第一次插入)。
这个查询让我了解了大部分内容。
select date_trunc (‘month’,date) as Date,productid, count(distinct serialnumber) from inventory
where date_trunc(‘month’,date)>= ‘2016-01-01’ and productID in ('1','2') and status = ‘INSERT’
group by date_trunc(‘month’,date), productid
order by date_trunc(‘month’,date) desc
但我意识到我正在 double/triple/quadruple 计算一些序列号,因为一件物品在其生命周期中可能会多次重新出现在我们的库存中。
上面的查询涵盖了这些场景,因为序列号只出现一次:
- 显示为新的
- 如旧显示
以下是我意识到我可能正在 double/triple/quadruple 计数的用例:
- 显示为新品,然后又恢复原样(不限制使用次数)
- 显示为已用,然后再次显示为已用(不限制显示已用的次数)
这是我 运行 的一个例子。
(注意:我添加了条件列以更好地说明这一点)。但特定序列号已入库三次(第一次是新的,然后是两次使用过的)
Date | ProductID | Count | Condition |
---|---|---|---|
7-1-21 | 1 | 1 | u |
11-1-18 | 1 | 1 | u |
2-1-17 | 1 | 1 | n |
在我当前的查询结果中,每次插入都会被计算在内(2017 年 2 月一次,2018 年 11 月一次,2021 年 7 月一次)。
我如何修改我的查询以确保我只计算第一个实例(插入)特定序列号出现在库存中 table?
在子查询中,使用 min
聚合函数仅计算每个 product/item 的首次插入日期。然后计算该结果的项目:
select Date, productid, count(serialnumber)
from (
select min(date_trunc(‘month’,date)) as Date, productid, serialnumber
from inventory
where date_trunc(‘month’,date) >= ‘2016-01-01’
and productID in ('1','2')
and status = ‘INSERT’
group by productid, serialnumber
) x
group by Date, productid
order by Date desc;