【问题标题】:How to get the last row in a historic如何获得历史记录中的最后一行
【发布时间】:2018-07-19 17:40:44
【问题描述】:

我有这个问题:

SELECT id,
    numero_processo,
    assunto,
    (
        SELECT processo_historico.urgencia
        FROM processo_historico
        WHERE processo_historico.id_processo = processo.id
        ORDER BY processo_historico.id DESC LIMIT 1
     ) as urgencia,
     (
        SELECT processo_historico.nome_resp
        FROM processo_historico
        WHERE processo_historico.id_processo = processo.id
        ORDER BY processo_historico.id DESC LIMIT 1
     ) as nome_resp,
     (
        SELECT processo_historico.user_responsavel
        FROM processo_historico
        WHERE processo_historico.id_processo = processo.id 
        ORDER BY processo_historico.id DESC LIMIT 1
     ) as user_responsavel,
     (
         SELECT processo_historico.data_chegada
        FROM processo_historico
        WHERE processo_historico.id_processo = processo.id
        ORDER BY processo_historico.id DESC LIMIT 1
     ) as data_chegada,
     (
         SELECT processo_historico.distribuicao
        FROM processo_historico
        WHERE processo_historico.id_processo = processo.id
        ORDER BY processo_historico.id DESC LIMIT 1
      ) as distribuicao,
      (
          SELECT processo_historico.despacho
        FROM processo_historico
        WHERE processo_historico.id_processo = processo.id
        ORDER BY processo_historico.id DESC LIMIT 1
      ) as despacho,
      (
          SELECT processo_historico.parecer
        FROM processo_historico
        WHERE processo_historico.id_processo = processo.id
        ORDER BY processo_historico.id DESC LIMIT 1
      ) as parecer    

     FROM processo

正如你们所看到的,子查询太多,无法为每个具有最后插入的“processo_historico”的“进程”创建 1 行。

我该如何改进呢?还有一个问题,我怎样才能把 WHERE 放在这样的地方:

WHERE processo_historico.user_responsavel = *userinput*

这需要给我最后一个“processo_historico”,其中“user_responsavel”是一些数字。

表之间的关系是:"processo" 1 x N "processo_historico"

【问题讨论】:

  • 你能用示例数据解释一下你想完成什么吗?
  • @Sjoerd 所以,表之间的关系是:table "processo" 1 x N table "processo_historico"。我想知道在哪里放置“WHERE”以获取在“processo_historico”上插入的最后一行,其中“processo_historico.user_responsavel”等于某个 int 值

标签: mysql sql mariadb


【解决方案1】:

减少多个子查询以获取每一列。

SELECT id,
processo.numero_processo,
processo.assunto,
ph.urgencia, 
ph.nome_resp,
ph.user_responsavel,
ph.data_chegada,
ph.distribuicao,
ph.despacho,
ph.parecer     
FROM processo
LEFT OUTER JOIN (    
    select
    processo_historico.urgencia, 
    processo_historico.nome_resp
    ,processo_historico.user_responsavel
    ,processo_historico.data_chegada
    ,processo_historico.distribuicao
    ,processo_historico.despacho
    ,processo_historico.parecer  
    FROM     
    processo_historico 
    WHERE ph.user_responsavel = *userinput*
    ORDER BY processo_historico.id DESC LIMIT 1)
AS ph ON ph.id_processo = processo.id 

【讨论】:

  • 感谢您的帮助,但此 sql 对所有“processo_historico”数据返回 NULL...
  • @GuilhermePedrazzi - 子查询自己运行时会给出什么?
  • 'userinput' 的测试需要在子查询中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 2017-06-24
相关资源
最近更新 更多