从一组至少具有一个状态的重复记录中选择一个具有给定状态的记录

达尼洛(Danilo Souza)Morães

我有一个通过向外部系统发送3个参数来请求信息的系统:user,start_date和end_date。

我有桌子

request (
  id, 
  user, 
  start_date, 
  end_date, 
  status
) 

记录这些请求及其状态(Done对于已返回Waiting的请求,尚未返回的请求)。

每隔几个小时,我将重新提交尚未返回的请求,即使初始请求将来仍会返回。

一段时间后,我的表将对同一个用户/开始日期/结束日期有多个请求,其中一些正在等待,一些已经完成。

我需要的是一个查询,该查询返回所有重复请求的ID列表,但1 Done除外,其中至少一个请求的status = Done。

总之,我需要一种清除给定用户/ start_date / end_date超出请求的方法,如果其中至少有一个具有status = Done(无论哪个,我只需要为给定用户保留1 status = Done) / start_date / end_date)。

到目前为止,我已经能够找出至少完成1次的重复请求。要从该查询中选择除一个完整查询之外的所有查询,我很可能会将整个查询包装成另外2个选择并进行魔术处理,但是按原样进行的查询已经非常缓慢。有人可以帮助我重构它并选择所需的最终结果吗?

http://sqlfiddle.com/#!5/10c25a/1

我正在使用SQLite

来自sqlfiddle中提供的数据集的预期结果是:

454, 457, 603, (604 or 605 not both), 607, 608

shawnt00
select r.id from request r inner join (
    select user, start_date, end_date,
        min(case when status = 'Done' then id end) as keep_id
    from request
    group by user, start_date, end_date
    having count(case when status = 'Done' then 1 end) > 0 and count(*) > 1
) s on  s.user = r.user and s.start_date = r.start_date and s.end_date = r.end_date
    and s.keep_id <> r.id

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何删除具有一个唯一列的重复记录

有没有办法为每个“组”提取一个记录,该记录与同一组中的其他记录具有重复的价格?

从返回重复记录的组sql中选择一个ID?

SQL 查询以选择根据给定条件检查至少一个有效记录的记录

迭代熊猫数据框并创建另一个具有重复记录的数据框

从一个表中选择所有记录并从另一个表中匹配记录

查找具有至少一个关联的记录,但排除符合任何条件的记录

如何添加包含一组重复记录的第一个不同记录的 id 值的列

选择至少填充了一组选定字段中的一个的记录

查询以选择一个“更完整”的重复记录

如何在SQL的一个字段中选择没有重复项且具有最新记录的记录?

从关联的模型(表)中查找具有至少一个关联的所有记录

如何在cakephp 3.6中从一个表中选择所有记录并从另一个表中选择一些记录

选择具有至少一个空值的行

选择具有至少一个(任何)负值的行

选择具有至少一个set成员的行

选择/更新一个表中的记录,这些记录是从具有多个记录的另一表列中选择的喜欢的单词

从一个表中选择记录,而另一个表中没有两列

如何从一个表中选择另一个表中没有外键的记录

当联接表不匹配时,如何从一个表中选择所有记录?

选择在R中具有至少一个非缺失值的组

在 SQL Server 中选择一个组内的所有记录

SQL中的表中的重复记录具有两个相同的列值和一个不同的值

如果一个选择具有给定值,则选择整个组

Foxpro查询以从每个组中选择一个记录

sql从每个组中选择最后一个记录

具有上一个状态的Reactjs Concat

SQL查询仅具有一个条件的记录

给定该组至少包含一个非NA值,请删除该组中具有NA的行