SQL:在这种情况下如何按 sql 顺序查询

Posted

技术标签:

【中文标题】SQL:在这种情况下如何按 sql 顺序查询【英文标题】:SQL: how query in sql order by created in this case 【发布时间】:2013-04-25 23:13:28 【问题描述】:
select 
    consultas.id as a,
    consultas.clasificacion as cl,
    consultas.paciente_id as b,
    consultas.created,imc_kg_m2 as im
from
    consultas
join 
    signos_sintomas
    on 
        signos_sintomas.consulta_id = consultas.id
    where paciente_id in
    (select pacientes.id from pacientes where pacientes.id < 30 order by pacientes.id desc)
    and
        consultas.created in 
        (select consultas.created from consultas order by consultas.created asc  )
    and 
        imc_kg_m2 is not null

    ;  



 +-----+----+----+---------------------+------+
    | a   | cl | b  | created             | im   |
    +-----+----+----+---------------------+------+
    | 198 | 1  |  1 | 2012-07-25 00:00:00 | 25.6 |
    |   2 | 1  |  2 | 2012-05-30 00:00:00 | 25.5 |
    |   2 | 1  |  2 | 2012-05-30 00:00:00 | 25.5 |
    |   3 | 1  |  3 | 2012-05-30 00:00:00 | 21.1 |
    |   3 | 1  |  3 | 2012-05-30 00:00:00 | 21.3 |
    | 579 | 2  |  4 | 2012-10-03 00:00:00 | 22.9 |
    | 579 | 2  |  4 | 2012-10-03 00:00:00 | 22.9 |
    | 127 | 1  |  5 | 2012-07-16 00:00:00 | 28.7 |
    | 127 | 1  |  5 | 2012-07-16 00:00:00 | 28.9 |
    | 127 | 1  |  5 | 2012-07-16 00:00:00 | 28.9 |
    | 498 | 1  |  6 | 2012-09-19 00:00:00 | 29.7 |
    | 498 | 1  |  6 | 2012-09-19 00:00:00 | 29.7 |
    | 200 | 1  |  7 | 2012-07-25 00:00:00 |    0 |
    | 149 | 1  |  8 | 2012-07-18 00:00:00 | 23.6 |
    | 149 | 1  |  8 | 2012-07-18 00:00:00 | 23.6 |
    |   4 | 1  |  9 | 2012-06-16 00:00:00 |    0 |
    |   4 | 1  |  9 | 2012-06-16 00:00:00 | 24.9 |
    |   5 | 2  | 10 | 2012-06-26 00:00:00 | 24.9 |
    |   7 | 2  | 11 | 2012-06-26 00:00:00 |   25 |
    |   6 | 2  | 12 | 2012-06-26 00:00:00 | 24.8 |
    | 648 | 2  | 13 | 2012-10-22 00:00:00 | 27.5 |
    |   8 | 2  | 14 | 2012-06-26 00:00:00 |   34 |
    |   8 | 2  | 14 | 2012-06-26 00:00:00 | 32.8 |
    |   9 | 2  | 15 | 2012-06-26 00:00:00 | 32.8 |
    |   9 | 2  | 15 | 2012-06-26 00:00:00 | 32.8 |
    |   9 | 2  | 15 | 2012-06-26 00:00:00 | 32.2 |
    |  10 | 2  | 16 | 2012-06-26 00:00:00 | 29.8 |
    |  10 | 2  | 16 | 2012-06-26 00:00:00 | 30.4 |
    |  11 | 2  | 17 | 2012-06-26 00:00:00 | 28.1 |
    |  11 | 2  | 17 | 2012-06-26 00:00:00 | 28.1 |
    | 156 | 2  | 19 | 2012-07-18 00:00:00 | 29.5 |
    |  12 | 2  | 20 | 2012-06-26 00:00:00 |    0 |
    |  12 | 2  | 20 | 2012-06-26 00:00:00 |    0 |
    |  12 | 2  | 20 | 2012-06-26 00:00:00 |    0 |
    |  13 | 1  | 21 | 2012-06-26 00:00:00 |   29 |
    |  13 | 1  | 21 | 2012-06-26 00:00:00 |   29 |
    |  14 | 3  | 22 | 2012-06-26 00:00:00 | 32.5 |
    |  15 | 2  | 23 | 2012-06-26 00:00:00 | 30.4 |
    |  16 | 2  | 24 | 2012-06-26 00:00:00 |    0 |
    |  17 | 11 | 25 | 2012-06-26 00:00:00 |   28 |
    |  18 | 2  | 26 | 2012-06-26 00:00:00 | 23.9 |
    |  19 | 1  | 27 | 2012-06-27 00:00:00 |   32 |
    |  19 | 1  | 27 | 2012-06-27 00:00:00 |   32 |
    |  19 | 1  | 27 | 2012-06-27 00:00:00 | 34.4 |
    |  21 | 1  | 28 | 2012-06-27 00:00:00 | 29.1 |
    |  21 | 1  | 28 | 2012-06-27 00:00:00 | 29.1 |
    |  23 | 1  | 29 | 2012-06-27 00:00:00 | 26.8 |
    |  23 | 1  | 29 | 2012-06-27 00:00:00 | 26.3 |
    +-----+----+----+---------------------+------+

我尝试限制但 说: 错误 1235 (42000): 这个版本的 mysql 还不支持 'LIMIT & IN/ALL/ANY/SOME 子查询' 我只需要查询一个 imc_kg_m2 值但最近创建的

update pacientes
        join
    enfermedades ON pacientes.id = enfermedades.paciente_id
        join
    consultas ON consultas.paciente_id = pacientes.id
        join
    signos_sintomas ON signos_sintomas.consulta_id = consultas.id 
set 
    bmi = signos_sintomas.imc_kg_m2,
    enfermedades.promedio_presion_sistolica = ((pa_de_pie_izquierda + pa_sentado_izquierda) / 2),
    enfermedades.microalbuminuria = 0,
    enfermedades.macroalbuminuria = 0,
    enfermedades.fibrilacion = 0,
    enfermedades.ecv = 0,
    enfermedades.duracion = 15,
    enfermedades.antiht = 0,
    enfermedades.diabetes = 1
where
    enfermedades.riesgo_diabetes_mellitus = 1
        and pacientes.situacion = 0
        and riesgo_diabetes_dano_organo_blanco = 0
        and signos_sintomas.created in (select 
            signos_sintomas.created
        from
            signos_sintomas
                join
            consultas ON consultas.id = signos_sintomas.consulta_id
                join
            pacientes ON pacientes.id = consultas.paciente_id
        where
            pacientes.id = pacientes.id
        order by signos_sintomas.created , consultas.created desc);

值 null 我很自然,我需要更新 enfermedades 中最近的 imc_kg_m2

+------+-----+------+------+------+------+------+------+------+------+
| bmi  | p   | d1   | d2   | d3   | ecv  | m1   | m2   | f    | pa   |
+------+-----+------+------+------+------+------+------+------+------+
| NULL |   1 |    0 |    0 |    0 | 0    | 0    | 0    | 0    |  132 |
| NULL |   3 |    0 |    0 |    0 | 0    | 0    | 0    | 0    |  105 |
| NULL |  30 |    0 |    0 |    0 | NULL | NULL | 0    | NULL |  160 |
| NULL | 153 |    0 |    0 |    0 | NULL | NULL | 0    | NULL |  160 |
| NULL | 175 |    0 |    0 |    0 | NULL | NULL | 0    | NULL |  160 |
| NULL | 343 |    0 |    0 |    0 | NULL | NULL | 0    | NULL |  160 |
| NULL | 520 |    0 |    0 |    0 | NULL | NULL | 0    | NULL |  160 |
| NULL | 867 |    0 |    0 |    0 | NULL | NULL | 0    | NULL |  160 |
+------+-----+------+------+------+------+------+------+------+------+

我开始怀疑这样的咨询不能解决我的问题,依赖关系和现在存在的关系,我不能做任何其他方式来改变它会影响我的模型和视图模型。

【问题讨论】:

【参考方案1】:

不确定我是否完全理解目标,但我试了一下......

select 
consultas.id as a,
consultas.clasificacion as cl,
consultas.paciente_id as b,
consultas.created,
imc_kg_m2 as im
from consultas
join signos_sintomas on signos_sintomas.consulta_id = consultas.id
join (select pacientes.id from pacientes where pacientes.id < 30) p on consultas.paciente_id = p.id
where imc_kg_m2 = (select imc_kg_m2 from consultas where created = (select max(created) from consultas where imc_kg_m2 is not null)); 

为了解决这个错误,我为子查询设置了别名并加入了它们。我删除了一个,因为我无法弄清楚它为什么在那里。我还添加了where 来执行您要求的操作。如果它不符合您的要求,请发表评论。

【讨论】:

以上是关于SQL:在这种情况下如何按 sql 顺序查询的主要内容,如果未能解决你的问题,请参考以下文章

在这种特定情况下,如何使用 SQL 仅检索与日期字段的最后一个值相关的记录?

如何 "按顺序 "查询多个SQL

无论如何,为了提高 SQL 查询的性能,以按标签匹配计数查找具有顺序的行

如何在 SQL 中按时间顺序计算事件?

如何在没有昂贵查询的情况下更快地自连接表(Oracle SQL)

如何优化 sql 查询以避免在没有 php.ini 或设置时间限制的情况下执行最长时间 [关闭]