Sqlite 查询从一列中删除重复项。删除取决于第二列
Sqlite Query to remove duplicates from one column. Removal depends on the second column
请看下面的数据示例:
在这个 table 中,我有多个列。没有 PRIMARY KEY,根据我附上的图像,STK_CODE 中有一些重复项。根据 (min) 列,我想删除重复的行。
根据图像,一个 stk_code 具有三个不同的行。对应这些重复的stk_codes,(min)列的值不同,我想保留(min)列最小值的行。
我是 sqlite 的新手,我正在处理 (-lsqlite3) 以将 cpp 与 sqlite 结合起来。
有什么办法吗?
您的 table 有 rowid
作为主键。
使用它来获取您不想删除的 rowid
s:
DELETE FROM comparison
WHERE rowid NOT IN (
SELECT rowid
FROM comparison
GROUP BY STK_CODE
HAVING (COUNT(*) = 1 OR MIN(CASE WHEN min > 0 THEN min END))
)
此代码使用 rowid
作为 bare column 和 SQLite 的记录功能,当您使用 MIN()
或 MAX()
聚合函数时,查询 returns 包含最小值或最大值的行。
查看简化版 demo。
请看下面的数据示例:
在这个 table 中,我有多个列。没有 PRIMARY KEY,根据我附上的图像,STK_CODE 中有一些重复项。根据 (min) 列,我想删除重复的行。
根据图像,一个 stk_code 具有三个不同的行。对应这些重复的stk_codes,(min)列的值不同,我想保留(min)列最小值的行。
我是 sqlite 的新手,我正在处理 (-lsqlite3) 以将 cpp 与 sqlite 结合起来。
有什么办法吗?
您的 table 有 rowid
作为主键。
使用它来获取您不想删除的 rowid
s:
DELETE FROM comparison
WHERE rowid NOT IN (
SELECT rowid
FROM comparison
GROUP BY STK_CODE
HAVING (COUNT(*) = 1 OR MIN(CASE WHEN min > 0 THEN min END))
)
此代码使用 rowid
作为 bare column 和 SQLite 的记录功能,当您使用 MIN()
或 MAX()
聚合函数时,查询 returns 包含最小值或最大值的行。
查看简化版 demo。