这段sql在pg库中执行报错:column "rowid" does not exist
时间: 2023-12-10 21:02:13 浏览: 65
非常抱歉,我之前给出的SQL语句中的ROWID是Oracle数据库特有的伪列,并不适用于PostgreSQL。在PostgreSQL中,你可以使用CTID来代替ROWID。以下是修改后适用于PostgreSQL的SQL语句:
```sql
DELETE FROM tb_kdddd_adm_pac_ftth_gis003_day
WHERE ctid NOT IN (
SELECT MIN(ctid)
FROM tb_kdddd_adm_pac_ftth_gis003_day
WHERE vbegday = '20230712'
GROUP BY vdevid
HAVING COUNT(*) > 1
) AND vbegday = '20230712';
```
这个SQL语句使用了CTID来选择在指定日期下存在重复数据的vdevid值。然后,通过外部的DELETE语句,删除除了每个重复数据中的最小CTID对应的记录之外的所有记录。这样可以保留一条重复数据。
请确保在执行这个操作之前,先备份你的数据以防万一。
相关问题
种方法是在查询中使用子查询来选择ROWID或采样怎么弄
您可以在SQL语句中使用子查询来选择ROWID或采样。如果您希望选择ROWID,则可以使用以下SQL语句:
SELECT ROWID, column1, column2
FROM table_name
WHERE ROWID = (SELECT MIN(ROWID) FROM table_name)
如果您希望进行采样,则可以使用以下SQL语句:
SELECT column1, column2
FROM table_name
SAMPLE (10)
其中,SAMPLE函数可以指定您希望返回的行数。在此例子中,我们返回10行。
rowid 在数据库中可以作为标签利用么
这个问题属于技术问题,可以回答。在关系型数据库中,rowid是一种特殊的列,用于标识一行数据,但不建议直接使用它作为标签。一些数据库系统可能会因为重建索引或者其他操作导致rowid的改变。推荐使用业务相关的列作为标签。