pgsql根据barcode去重取最近更新的一条数据

一、根据barcode去重,每个barcode都取最近更新的一条
SELECT DISTINCT ON (barcode) *
FROM your_schema1.your_table1
ORDER BY barcode, updated_time DESC;

二、有where条件时也可以这么写

SELECT DISTINCT ON (barcode) *
FROM your_schema1.your_table1
where barcode in (select barcode from your_schema2.your_table2 where updated_by = 'dalao')
  and updated_by != 'dalao'
ORDER BY barcode, updated_time DESC;

### 如何在 PostgreSQL 中对记录进行并统计数量 #### 使用 `COUNT(DISTINCT ...)` 函数 最直接的方法是利用 SQL 的内置聚合函数 `COUNT(DISTINCT column_name)` 来计算唯一值的数量。例如,要获特定时间范围内每天的不同用户ID数目: ```sql SELECT to_char(paytime, 'YYYY-MM-DD') AS date, COUNT(DISTINCT userid) AS unique_users FROM orders WHERE paytime BETWEEN '2021-07-31 23:59:59' AND '2021-08-04 23:59:59' GROUP BY to_char(paytime, 'YYYY-MM-DD') ORDER BY date; ``` 这种方法简单易懂,但对于大数据集可能性能不佳。 #### 应用 HyperLogLog 扩展实现近似计数 为了提高大规模数据处理的速度,在接受一定误差的情况下可采用HyperLogLog算法来估算集合大小。这需要安装相应的扩展模块,并创建专门用于存储HLL状态的对象。之后可以通过简单的SQL语句完成高效的估计[^2]。 ```sql -- 假设已启用 hll 扩展 CREATE TABLE daily_user_counts ( dt DATE PRIMARY KEY, user_ids HLL NOT NULL DEFAULT empty_hll() ); INSERT INTO daily_user_counts(dt,user_ids) WITH users_per_day AS( SELECT DISTINCT ON (userid,to_char(paytime,'YYYY-MM-DD')) * FROM orders o WHERE paytime::DATE >= '2021-08-01' AND paytime::DATE <= '2021-08-04' ) SELECT to_char(paytime,'YYYY-MM-DD'),hll_add_agg(hll_hash_integer(userid)) FROM users_per_day GROUP BY to_char(paytime,'YYYY-MM-DD'); -- 查询某天的预估独立访客量 SELECT cardinality(user_ids),dt FROM daily_user_counts WHERE dt='2021-08-01'; ``` 上述方法提供了两种不同的途径来进行统计:一种基于精确的结果但可能存在性能瓶颈;另一种则牺牲了一定程度上的准确性换更高的执行效率。具体选择决于实际应用场景的需求以及所能容忍的最大相对误差范围。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值