gpt4 book ai didi

sql - 从至少具有该状态的一组重复记录中选择具有给定状态的一条记录

转载 作者:行者123 更新时间:2023-12-03 18:32:59 26 4
gpt4 key购买 nike

我有一个系统通过向外部系统发送 3 个参数来请求信息:用户、开始日期和结束日期。

我有一张 table

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

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

每隔几个小时,我将重新提交尚未返回的请求,即使最初的请求在 future 一段时间内仍可能返回。

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

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

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

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

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

我正在使用 SQLite

sqlfiddle 中提供的数据集的预期结果是这样的:
454, 457, 603, (604 or 605 not both), 607, 608

最佳答案

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

关于sql - 从至少具有该状态的一组重复记录中选择具有给定状态的一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50244052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com