gpt4 book ai didi

mysql - 查询划分数据

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

我们有两列 id 和 Monthid。

我正在寻找的输出是根据季度将年份与月份 Id 分开。输出列应来自季度。如果 id 处于事件状态,则输出应为 1,否则为 0。如果 id 出现在第一季度的任何一个中(例如:仅 1),则输出仍为 1。

像这样:

id           month
-----------------------------------
100 2012-03-01 00:00:00.0
100 2015-09-01 00:00:00.0
100 2016-10-01 00:00:00.0
100 2015-11-01 00:00:00.0
100 2014-01-01 00:00:00.0
100 2013-04-01 00:00:00.0
100 2014-12-01 00:00:00.0
100 2015-02-01 00:00:00.0
100 2014-06-01 00:00:00.0
100 2013-01-01 00:00:00.0
100 2014-05-01 00:00:00.0
100 2016-05-01 00:00:00.0
100 2013-07-01 00:00:00.0

结果应该是这样的

ID    YEAR     QTR      output (1 or 0)
--------------------------------------------------
100 2012 1 1
100 2012 2 0
100 2012 3 0
100 2012 4 0
100 2013 1 1
100 2013 2 1
100 2013 3 1
100 2013 4 0

下面是我尝试过的,但它没有返回预期的结果。请帮助我实现这一点。我也希望输出为 0。

select a.id,a.year,a.month,
CASE WHEN a.month BETWEEN 1 AND 4 THEN 1
ELSE 0 END as output
from
(select id,trim(substring(claim_month_id,1,4)) as year,(INT((MONTH(monthid)-1)/3)+1) as month from test) a
group by a.id,a.year,a.month

如有任何帮助,我们将不胜感激。

最佳答案

@Ani; Hive 中没有分层查询来创建四个季度 (1,2,3,4),因此我为其创建了一个小表。然后我获取 ims_ Patient_activity_diagnosis 表中存在的所有病人 ID、年份和月份。最后,我对所有可能的患者 ID、年份和季度进行了右连接 (1,2,3,4);如果右连接中不存在该 ID 或年份或季度,则该 ID、年份和季度没有任何事件。我为这些行指定 Activity=0。我还插入患者 id=200 来测试表中是否有更多患者 id。希望这可以帮助。谢谢。

create table dbo.qtrs(month int);
insert into qtrs values (1),(2),(3),(4);

select DISTINCT NVL(ims.id, qtr.id) as patient_id,
qtr.year as year,
qtr.month as month,
CASE WHEN ims.id > 0 THEN 1 ELSE 0 END as activity
from sandbox_grwi.ims_patient_activity_diagnosis ims
right join (select distinct ims.id,YEAR(ims.month_dt) as year,qtrs.month from sandbox_grwi.ims_patient_activity_diagnosis ims join dbo.qtrs qtrs) qtr
on (ims.id=qtr.id and YEAR(ims.month_dt)=qtr.year and INT((MONTH(month_dt)-1)/3)+1=qtr.month)
sort by patient_id, year, month;

Sample Result:
p_id year month activity
100 2012 1 1
100 2012 2 0
100 2012 3 0
100 2012 4 0
100 2013 1 1
100 2013 2 1
100 2013 3 1
100 2013 4 0
100 2014 1 1
100 2014 2 1
100 2014 3 0
100 2014 4 1
100 2015 1 1
100 2015 2 0
100 2015 3 1
100 2015 4 1
100 2016 1 0
100 2016 2 1
100 2016 3 0
100 2016 4 1
200 2012 1 1
200 2012 2 0
200 2012 3 0
200 2012 4 0
200 2013 1 0
200 2013 2 1
200 2013 3 0
200 2013 4 0


additional sample data:
insert into sandbox_grwi.ims_patient_activity_diagnosis values
(200, '2012-03-01'),
(200, '2013-04-01');

关于mysql - 查询划分数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48738432/

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