查询划分数据
Posted
技术标签:
【中文标题】查询划分数据【英文标题】:query to divide data 【发布时间】:2018-02-12 01:37:49 【问题描述】:我们有两列 id 和 monthid。
我正在寻找的输出是基于 Quarter 将 year 从 month 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;是所有的耐心_id = 100?如果没有,有多少个patient_id? 并非所有 ID 都相同。数据为 1.8 gb,我只取了一个 ID 进行测试。 @Ani;这类似于昨天发布的问题; ***.com/questions/48732957/…。不知道是不是同一个人发的。 【参考方案1】:@阿尼; 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');
【讨论】:
以上是关于查询划分数据的主要内容,如果未能解决你的问题,请参考以下文章