SQL辅助帮助-获取年龄
我是一个在业余时间学习SQL的人,我刚刚创建了一个帐户,请求对我正在尝试的教程提供帮助。我希望有人能在这方面帮助我。 下面是该场景的上下文。有人能帮我吗。一旦完成了,我有一个第2部分要完成,一旦完成了,我会把它贴在这里,检查是否所有看起来都正确。在发布之前,我自己也尝试过提问: 场景: 从包含2012年至今数据的住院患者表和 拥有超过一百万条记录,请执行以下操作(创建 子集,以便我们以后可以更快地查询: 标准SQL辅助帮助-获取年龄,sql,postgresql,Sql,Postgresql,我是一个在业余时间学习SQL的人,我刚刚创建了一个帐户,请求对我正在尝试的教程提供帮助。我希望有人能在这方面帮助我。 下面是该场景的上下文。有人能帮我吗。一旦完成了,我有一个第2部分要完成,一旦完成了,我会把它贴在这里,检查是否所有看起来都正确。在发布之前,我自己也尝试过提问: 场景: 从包含2012年至今数据的住院患者表和 拥有超过一百万条记录,请执行以下操作(创建 子集,以便我们以后可以更快地查询: 标准 查找2012年4月至2013年3月的冠心病患者,诊断结果可以 主要或次要诊断 再次查
- 查找2012年4月至2013年3月的冠心病患者,诊断结果可以 主要或次要诊断
- 再次查找2012年4月至2013年3月患有“P11”疾病的患者 诊断可以是主要诊断或次要诊断
- 2012年4月至3月清除患有“P11”疾病的冠心病患者 2013年
- 2013年4月至2014年3月发现“P11”疾病
- 创建2012年4月至2013年3月CHD患者的最终数据集
2013年4月至2014年3月的第11页 - 在调查期间,找出最早诊断为“P11”的病例的日期 定义的时间段,将其定义为索引日期
- 查找19岁以上且在索引日期存活的患者
- 查找冠心病患者2012年4月-2013年3月:
- 2012-2013年患有P11的患者:
- 删除2012-2013年诊断为P11的冠心病患者
- 2013年4月至2014年3月发现“P11”疾病
- 创建2012年4月至2013年3月CHD患者的最终数据集 2013年4月至2014年3月的第11页
- 在调查期间,找出最早诊断为“P11”的病例的日期 定义的时间段,将其定义为索引日期
- 查找年龄在19岁以上且在索引日期还活着的患者*(我不确定 以下是我所做的步骤): 查找索引日期的患者年龄
请有人在我不确定的最后一点上帮助我。另外,如果在任何阶段您觉得可以改进以提高效率,请告诉我。为您解决这些问题会破坏乐趣,但我给您一些提示:
- 并非所有这些问题都需要
语句。如果问题是“Find…”,他们可能在寻找CREATE TABLE
语句;“Remove…”要求SELECT
,我不确定什么是“最终数据集”应该是,但可能DELETE
创建表…因为
是正确的
- 您可以使用可读性更强的
代替WHERE x='value'
WHERE x='value'
“
或”
在SQL中无效。在教程中,它确实要求为每个问题创建一个子表,因为这将elp查询速度更快,因为原始数据集包含超过1m条记录。此外,我需要帮助解决这些问题,因为我不确定,而且在目前阶段,这并不“有趣”另外,postgresql不允许我使用=,因此我最终使用infunction@healthiq:Postgres最明确地允许你使用=
,例如其中id=42
或其中x='foobar'
,但是如果你想学习SQL,你如何从阅读别人的答案中获益?如果你正在学习的课程没有在给你分配作业之前,给你一些学习的样本,你应该找到一个不同的课程。@a_horse_,没有名字,谢谢,下次会尝试使用它
create table chd_patients201213
as
select *
from inpatient
where enddate between '2012-04-01' and '2013-03-31'
and ( ( left(Primary_diag, 3) in ( ‘CHD’ ) )
or ( left(Secondary_diag, 3) in ( ‘CHD )
create table P11_patients201213 as
select * from inpatient where disdate between '2012-04-01' and '2013-03-31'
and ( left(primary_diag, 3) in (‘P11') or left(secondary_diag, 3) in (‘P11’) )
create table CHD_withoutp11
as
select *
from chd_patients201213
where patientid not in ( select patientid from P11_patients201213 )
create table P11_patients201314 as
select *
from inpatient
where disdate between '2013-04-01' and '2014-03-31'
and ( left(primary_diag, 3) in (‘P11')
or left(secondary_diag, 3) in (‘P11’) )
create table chd_withp11_1314
as
select *
from CHD_withoutp11
where patientid in ( select hesid from P11_patients201314 )
create table chd_index
as
select patientid, min(disdate) as indexdate
from chd_withp11_1314
group by patientid
create table chd_age
as
select t1.patientid, t1.endage as age, t1.dismeth, t2.indexdate
from chd_withp11_1314 t1
inner join chd_index t2
on t1.patientid=t2.patientid
and t1.disdate=t2.indexdate
group by t1.hesid, t1.endage, t2.indexdate,t1.dismeth
create table chd_18andalive as
select distinct (patientid),age,dismeth
from chd_age
where (age between 19 and 250 )
and dismeth not in ('dead')