首页 > 数据库 >postgresql 多条记录合并一条,或取最新的一条数据

postgresql 多条记录合并一条,或取最新的一条数据

时间:2024-04-26 18:34:02浏览次数:13  
标签:00 一条 postgresql name create 00.000000 person 或取 time

将一个表中的某一列的多行数据拼接成一行

一种方法

SELECT person_id AS job_no,
       string_agg(person_name,',') as str_person_name
       
FROM public.tb_attendance_model
WHERE create_time >= '2019-06-17 00:00:00.000000'
  AND create_time < '2020-06-17 00:00:00.000000'
GROUP BY person_id        
ORDER BY str_person_name DESC
LIMIT 10000;```



![](https://mutouzuo.oss-cn-hangzhou.aliyuncs.com/my/20200617110022324.png)


去掉重复的,增加distinct

```python
SELECT person_id AS job_no,
       string_agg(distinct(person_name),',') as str_person_name
       
FROM public.tb_attendance_model
WHERE create_time >= '2019-06-17 00:00:00.000000'
  AND create_time < '2020-06-17 00:00:00.000000'
GROUP BY person_id        
ORDER BY str_person_name DESC
LIMIT 10000;```



![](https://mutouzuo.oss-cn-hangzhou.aliyuncs.com/my/20200617110158403.png)


 

如果要排序,就要使用第二种方法,array_agg

```python
SELECT person_id AS job_no,
       string_agg(distinct(person_name),',') as str_person_name,
       array_to_string(array(select unnest(array_agg(person_name  order by create_time desc ))),',') as arr_person_name
FROM public.tb_attendance_model
WHERE create_time >= '2019-06-17 00:00:00.000000'
  AND create_time < '2020-06-17 00:00:00.000000'
GROUP BY person_id        
ORDER BY str_person_name DESC
LIMIT 10000;```


    



![](https://mutouzuo.oss-cn-hangzhou.aliyuncs.com/my/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1YW5zag==,size_16,color_FFFFFF,t_70)

![](https://mutouzuo.oss-cn-hangzhou.aliyuncs.com/my/2022010708182285224.gif)
​

 

如果要取最新的一条数据, 则要用row_number()

```python
select job_no, person_name from (
SELECT person_id AS job_no,	
	person_name,
       row_number() over(partition by person_id order by create_time desc) as ranks
FROM public.tb_attendance_model tam
WHERE tam.create_time >= '2019-06-17 00:00:00.000000'
  AND tam.create_time < '2020-06-17 00:00:00.000000'     
ORDER BY job_no DESC
LIMIT 10000) tb where ranks=1```



![](https://mutouzuo.oss-cn-hangzhou.aliyuncs.com/my/20200617115848782.png)


或者用(array_agg(person_name order by create_time desc ))[1]

```python
SELECT person_id AS job_no,
       string_agg(distinct(person_name),',') as str_person_name,
       (array_agg(person_name order by create_time desc ))[1] as arr_person_name
FROM public.tb_attendance_model
WHERE create_time >= '2019-06-17 00:00:00.000000'
  AND create_time < '2020-06-17 00:00:00.000000'
GROUP BY person_id        
ORDER BY str_person_name DESC
LIMIT 10000;```



![](https://mutouzuo.oss-cn-hangzhou.aliyuncs.com/my/20200617120430692.png)

标签:00,一条,postgresql,name,create,00.000000,person,或取,time
From: https://www.cnblogs.com/bigleft/p/18160652

相关文章

  • PostgreSQL14.11一键启动免安装绿色版
    PostgreSQL14.11_x64一键启动免安装版使用方法:解压后,将整个文件夹放到你希望的位置,注意路径不要包含中文。双击运行bat即可,第一次打开会自动初始化数据库目录。注意:pgsql15版本以后,需要使用navicat16.2以上版本才可以正常连接。想使用最新版本的PostgreSQL16.2,可以下载P......
  • postgresql 绿化
    下载官方原版二进制包下载地址解压后删除目录doc、include、pgAdmin4、StackBuilder、symbols,分别对应文档、开发用的头文件、pgadmin管理工具、StackBuild工具、开发用的静态链接库需要安装vc2010_redisinitdb.exe-D..\data-EUTF8pg_ctl-D../datastartcr......
  • postgresql中两张表的聚合函数合并到一列或一行,做除法,并保留两位小数
    --两张表的无关数据合并到一张表SELECTA.name,B.nameFROM(selecto.name,row_number()over(orderbyname)fromtb_orgaso)A FULLJOIN (selectr.name,row_number()over(orderbyr.name)fromtb_regionasr)BONA.row_number=B.row_number;这里是利用......
  • 22.Postgresql的checkpoint功能
    PostgreSQL中的checkpoint是数据库管理系统(DBMS)中的一项重要机制,用于确保数据的一致性、可恢复性和性能管理。以下是关于PostgreSQLcheckpoint的详细解释:checkpoint的定义与作用定义:Checkpoint是一个在WAL(Write-AheadLog)序列中的点,此时所有数据文件已更新,反映了到该点为止......
  • postgresql重置序列和自增主键
    1.问题背景数据表中插入了几条测试数据,后又手动删除,导致后面插入数据的时候报主键冲突:ERROR:duplicatekeyvalueviolatesuniqueconstraint"tableName_pkey"DETAIL:Key(id)=(1)alreadyexists.12即使采用INSERTIGNORE的方式或者REPLACEINTO的方式还是报错,所以就想......
  • PostgreSQL源码编译安装指南
    一、版本说明centos7.9postgresql12.2二、配置系统基本环境#1.创建postgres用户groupaddpostgresuseradd-gpostgrespostgresecho"666666"|passwdpostgres--stdin#2.配置用户环境变量su-postgrescat>>~/.bash_profile<<EOFexportPGPORT=1922expor......
  • postgresql数据定时转存mongodb方案
    案例背景很多事件记录在最初一段时间读写比较频繁,存储在postgresql比较合适,后期数据量变大,且仅作为历史记录查询,更适合存储在mongodb中,可能需要定期将postgresql中的数据转存到mongodb。案例分析postgresql数据定时转存mongodb,可以采用jdbc方式将postgresql读入内存,对每条......
  • LightDB兼容扫描 - 事前SQL兼容迁移评估工具24.1支持MySQL --> TDSQL-PostgreSQL兼容
    兼容扫描工具下载地址:事前SQL兼容迁移评估工具使用说明:LightDB-事前SQL兼容迁移评估工具使用手册本次24.1版本新增了对MySQL迁移到TDSQL-pg的兼容性扫描。工具的具体使用方法请阅读使用说明文档,针对本次更新,涉及配置项targetDataBase改为MySQL-to-TDSQL-PostgreSQL。以下是......
  • Ubuntu22.04安装PostgreSQL15
    Ubuntu22.04安装PostgreSQL15启用PostgreSQL包存储库sudosh-c'echo"debhttp://apt.postgresql.org/pub/repos/apt$(lsb_release-cs)-pgdgmain">/etc/apt/sources.list.d/pgdg.list'wget-qO-https://www.postgresql.org/media/keys/ACCC4CF8......
  • PostgreSql: ERROR: value too long for type character varying(1) 定位字段方法
    报错原因设置的数据库字段长度为1,但实际的值超过规定字段,导致报错。解决方案首先,需要定位字段是哪个字段出现的报错,但可惜的是,并没有报出具体是哪个字段在报错,所以只能通过检查Schema,查看哪些字段是长度为1的,然后再进行值的比较,才能锁定位置。ERROR:valuetoolongfortype......