查询划分数据

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'); 

【讨论】:

以上是关于查询划分数据的主要内容,如果未能解决你的问题,请参考以下文章

Grafana Cloud:划分两个查询显示“无数据”

在excel vba上划分sql查询

类似子查询划分的简化解决方案

如何解决这个关系划分查询?

oracle数据库中查询结果的列如何划分

如何在 grafana 中创建普罗米修斯图来划分两个查询?