【问题标题】:How to derive an attribute value automatically based on other table values如何根据另一个表值自动派生属性值
【发布时间】:2020-02-16 20:13:16
【问题描述】:

所以我有一些表,并希望根据其他表间隔值填充数据库属性。

基本思想是使用以下值填充“眼睛年龄”属性:年轻、早产儿或早产儿,具体取决于患者的年龄。

我有患者表的出生日期,需要根据患者出生日期使用 BirthToEyeAge 中的值填充最后一个属性,从而推断其年龄。

我该怎么做,或者我应该阅读哪些文档来学习这类事情。 提前感谢每一位参与者。

INSERT INTO BirthToEyeAge(bId, minAge , maxAge , eyeAge)        
VALUES(1, 0, 28 , 'young')
VALUES(2, 29, 59, 'probyotic')
VALUES(3, 60, 120, 'pre-probyotic')


INSERT INTO Patient( patId, firstName, lastName, birthDate )
VALUES( 1, 'Ark', 'May', '1991-7-22' );


INSERT INTO Diagnostic( diagId, date, tear_rate, consId_Consulta, eyeAge )
VALUES( 1, '2019-08-10', 'normal', 1, ??? );

【问题讨论】:

    标签: database postgresql populate


    【解决方案1】:

    您可以将表PatientBirthToEyeAge 连接起来,利用handy postgres function age() 来计算患者被诊断时的年龄。这是一个基于此逻辑的insert 查询:

    insert into Diagnostic( diagId, date, tear_rate, consId_Consulta, eyeAge )
    select d.*, b.bId
    from
        (select 1 diagId, '2018-08-10'::date date, 'normal' tear_rate, 1 consId_Consulta ) d
        inner join patient p 
            on d.consId_Consulta = p.patId
        inner join BirthToEyeAge b 
            on extract(year from age(d.date, p.birthDate)) between b.minAge and b.maxAge;
    

    在这个demo on DB Fiddle中,在创建表,初始化它们的内容,运行上面的查询之后,Diagnostic的内容是:

    | diagid | date                     | tear_rate | consid_consulta | eyeage |
    | ------ | ------------------------ | --------- | --------------- | ------ |
    | 1      | 2018-08-10T00:00:00.000Z | normal    | 1               | 1      |
    

    【讨论】:

    • 完美运行。因为我需要字符串,所以只将 b.bId 更改为 b.eyeAge。但它工作得很好。非常感谢!
    • 欢迎@IvanRosa!很高兴它有帮助。
    猜你喜欢
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多