【问题标题】:Select unique Records based on a column by conditionally removing the other record having same column value based on some other coumn in sql通过基于 sql 中的其他一些列有条件地删除具有相同列值的其他记录来选择基于列的唯一记录
【发布时间】:2021-02-11 09:44:17
【问题描述】:

我正在开发一个使用 Room 持久性库的 Android 应用。在其中一个表(房间实体)中,我想通过有条件地删除基于其他列具有相同列值的其他记录来基于列选择唯一记录。

以下表为基础。

S_ID STATUS
1 Pending
1 Rejected
3 Approved
4 Approved
5 Pending
6 Rejected
7 Rejected

如果 S_ID 与另一个“待处理”状态记录冲突,我希望从结果中删除状态为“Rejected'”的记录的 SQL 查询的预期结果

S_ID STATUS
1 Pending
3 Approved
4 Approved
5 Pending
6 Rejected
7 Rejected

到目前为止我所尝试的:

select DISTINCT s_id OR s_id = 0, * from TABLE1

【问题讨论】:

    标签: android sql android-room


    【解决方案1】:

    您可以为此使用聚合:

    select s_id, min(status) as status
    from table_id
    group by s_id;
    

    这利用了max()'Pending' < 'Rejecdted' 使用字母顺序的事实。

    【讨论】:

    • 谢谢 Gordon,我使用了您的建议如下:SELECT * FROM table1 WHERE S_ID in (select s_id, min(status) as status from table1 group by s_id) ORDER BY status = \"Rejected \" DESC 但这给出了 SQL 错误(子选择返回 2 列 - 预期为 1)
    • @RKB 。 . .我建议的是答案中的代码。它解决了您提出的问题。
    【解决方案2】:

    我想你可以试试下面的查询:

    SELECT * FROM table1 WHERE table1.S_ID in (SELECT S_ID FROM table1 GROUP BY S_ID HAVING COUNT(S_ID)>0) and table1.[status]<>'Rejected'
    

    已编辑:

    SELECT table1.S_ID, 
    (select Alias.[Status] from Table1 Alias where Alias.S_ID=table1.S_ID  
    and ((COUNT(table1.S_ID)>1 and Alias.[Status]<>'Rejected') or COUNT(table1.S_ID)=1) 
    ) as [Status]
    FROM table1 GROUP BY S_ID HAVING COUNT(S_ID)>0
    

    【讨论】:

    • 谢谢,但这是返回所有“拒绝”记录被删除的结果,我想要的只是省略那些 S_ID 与“待定”状态记录的 S_ID 冲突的“拒绝”记录.它应该在结果中返回其他“拒绝”记录。为了更清楚地了解结果,我编辑了我的问题。
    • 你可以试试下面的查询:SELECT table1.S_ID, (select Alias.[Status] from Table1 Alias where Alias.S_ID=table1.S_ID and ((COUNT(table1.S_ID)>1 and Alias.[Status]'Rejected') or COUNT(table1.S_ID)=1) ) as [Status] FROM table1 GROUP BY S_ID HAVING COUNT(S_ID)>0
    • 我使用您编辑的查询如下:SELECT * FROM table1 WHERE table1.S_ID in (SELECT table1.S_ID, (select Alias.[Status] from Table1 Alias where Alias.S_ID=table1.S_ID and (((COUNT(table1.S_ID)>1 and Alias.[Status]'Rejected') or COUNT(table1.S_ID)=1)) as [Status] FROM table1 GROUP BY S_ID HAVING COUNT(S_ID)>0) ORDER BY STATUS = "Rejected" DESC 但这给了 SQLITE_ERROR] SQL 错误或缺少数据库(滥用聚合函数 COUNT())
    • 您只接受已编辑的查询?如下所示: SELECT table1.S_ID, (select Alias.[Status] from Table1 Alias where Alias.S_ID=table1.S_ID and ((COUNT(table1.S_ID)>1 and Alias.[Status]'Rejected') 或COUNT(table1.S_ID)=1) ) as [Status] FROM table1 GROUP BY S_ID
    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 2023-03-17
    • 1970-01-01
    • 2019-05-16
    相关资源
    最近更新 更多