我有一个名为tbl_A
的表,其中包含以下架构:
插入后,我在tbl_A
中有以下数据:
现在的问题是如何为以下场景编写查询:
输出屏幕拍摄:
我认为我们应该使用案例陈述,但我无法连续三天检查。我希望我能在这方面得到帮助
谢谢
答案 0 :(得分:1)
select name, case when max(cons_days) >= 3 then 1 else 0 end as presence
from (
select name, count(*) as cons_days
from tbl_A, (values (0),(1),(2)) as a(dd)
group by name, adate + dd
)x
group by name
答案 1 :(得分:0)
在name
和available = 'Y'
上进行自我加入后,我们会为给定的name
创建一个包含不同日期组合的内部表,并计算日期中的日期该表的两个实例相距少于2个单位,即对于日期adate
的每个值,它将检查具有自己的值adate
以及adate + 1
和{的条目{1}}。如果所有3个条目都存在,则计数将为adate + 2
,并且对于此类3
,您将拥有值为1
的标记(这在外部查询中完成)。请尝试以下查询:
names
由于问题的复杂性,我无法测试它。如果出现问题,请告诉我,我很乐意回答。
答案 2 :(得分:0)
--Below is My Approch
select Name,
Case WHen Max_Count>=3 Then 1 else 0 end as Presence
from
(
Select Name,MAx(Coun) as Max_Count
from
(
select Name, (count(*) over (partition by Name,Ref_Date)) as Coun from
(
select Name,adate + row_number() over (partition by Name order by Adate desc) as Ref_Date
from temp
where available='Y'
)
) group by Name
);