gpt4 book ai didi

SQL 查询 - 如何检查结果是否是第一个

转载 作者:行者123 更新时间:2023-11-29 13:17:29 25 4
gpt4 key购买 nike

我在 PostgreSQL 中的查询显示在 :start_date 和 :end_date 之间的某个时间段内举行的 session 。

问题出在“ktore”列,它显示 session 是否是第一次。我使用“inner join”添加子查询来计算我在公司的 session ,如果count > 1,则写“next”,否则写“first”。但它仅显示上次 session 日期的正确结果。让我举一个例子:

Company1 有两次 session - 2017-09-02 的第 1 次 session 和 2017-09-05 的第 2 次 session 。

如果我选择 :start date 到 2017-09-01 和 :end_date 到 2017-09-06,那么我的查询显示:

id   company_name  audit_date  nip      ktore
...
234 Company1 2017-09-02 1234567 NEXT
...
287 Company1 2017-09-05 1234567 NEXT

但我想要这个:

id   company_name  audit_date  nip      ktore
...
234 Company1 2017-09-02 1234567 FIRST
...
287 Company1 2017-09-05 1234567 NEXT

那么我应该在查询中做什么?

select a.id, a.company_name, to_char(a.audit_date,'YYYY-MM-DD hh:mi') audit_date, companys.nip, 
case
when b.costam > 1 then 'NEXT'
else 'FIRST'
end ktore
from companys, meetings a
inner join (select company_id, count(1) costam from meetings where status !='CANCELED' and status !='SUSPENDED'
and to_char(audit_dc,'YYYY-MM-DD')<= :end_date group by company_id) b on a.company_id = b.company_id
where to_char(a.audit_date,'YYYY-MM-DD')>= :start_date
and to_char(a.audit_date,'YYYY-MM-DD')<= :end_date and companys.id = a.company_id

我认为写一些类似“如果公司存在更早的 session ,则为“NEXT”,否则为“FIRST”之类的内容会很好,但我不知道如何在代码中实现。

先谢谢你,马特乌斯

最佳答案

尝试下面的查询它会起作用。我的逻辑是,我从子查询中获取最少的 audit_date,然后与主表审计日期进行比较,如果匹配则给出 FIRST,否则给出 NEXT,如果 companyId 有 3 个不同的日期,那么它将为最小日期给出 FIRST,然后给出 NEXT剩余日期

select a.id, a.company_name, to_char(a.audit_date,'YYYY-MM-DD hh:mi') audit_date, companys.nip, 
case
when b.costam >1 and min_audit_date=a.audit_date then 'FIRST'
else 'NEXT'
end ktore
from companys, meetings a
inner join (select company_id, count(1) costam,min(audit_date) min_audit_date,max(audit_date) max_audit_date from meetings where status !='CANCELED' and status !='SUSPENDED'
and to_char(audit_dc,'YYYY-MM-DD')<= :end_date group by company_id) b on a.company_id = b.company_id
where to_char(a.audit_date,'YYYY-MM-DD')>= :start_date
and to_char(a.audit_date,'YYYY-MM-DD')<= :end_date and companys.id = a.company_id

如果您的逻辑与我上面所做的相反,您可以更改逻辑,方法是使用 最大审核日期

关于SQL 查询 - 如何检查结果是否是第一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46938591/

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