我有一张表,是法律程序进展的集合条目。
id_andamento_processo id_processo data_andamento hora_andamento descricao
1 18 2016-05-30 14:00:00
2 3122 2016-05-18 16:08:54 campo para o texto da PUBLICAÇÃO DO DIÁRIO OFICIAL
3 3122 2016-05-18 16:09:55 campo para o texto da PUBLICAÇÃO DO DIÁRIO OFICIAL
4 3122 2016-05-18 16:13:49 campo para o texto da PUBLICAÇÃO DO DIÁRIO OFICIAL
5 2001 2015-07-15 14:34:54 ANDAMENTO: 30/06/2014 Protocolo (E-Doc 12148046) 10003/2014 (LAT-Laudo Assistente Técnico): PROTOCOLO
6 2001 2015-07-15 14:34:54 ANDAMENTO: 03/07/2014 Protocolo (E-Doc 12174924) 10352/2014 (LPC-Laudo Pericial (Conhecimento)): PROTOCOLO
7 2001 2015-07-15 14:34:54 ANDAMENTO: 15/07/2014 Devolução de Carga
如何创建一个查询,为我提供每个流程的最新日期和时间?
我跟随了这个相关问题的aswer: how do I query sql for a latest record date for each user 我能够获得每个流程的最新日期。
select a.id_processo, a.data_andamento, a.hora_andamento, a.descricao_ptbr
from andamento_processo a
inner join (
select id_processo, max(data_andamento) as Maxdata_andamento
from andamento_processo
group by id_processo
) am on a.id_processo = am.id_processo and a.data_andamento = am.Maxdata_andamento
但是,这将返回具有相同日期和不同时间的重复进度:
id_processo data_andamento hora_andamento descricao_ptbr
0 2016-06-09 11:03:00
18 2016-06-21 11:01:00
18 2016-06-21 11:12:00 Verificação teste para o RR juridico.
18 2016-06-21 11:37:00 Teste
我试着在进度的一小时内添加一个MAX,但是没有工作,一些进展消失了。我试过这样:
select a.id_processo, a.data_andamento, a.hora_andamento, a.descricao_ptbr
from andamento_processo a
inner join (
select id_processo, max(data_andamento) as Maxdata_andamento, max(hora_andamento) as Maxhora_andamento
from andamento_processo
group by id_processo
) am on a.id_processo = am.id_processo and a.data_andamento = am.Maxdata_andamento and a.hora_andamento = am.Maxhora_andamento
我正在使用MySQL。我需要一个没有重复进展的查询,如下所示:
id_processo data_andamento hora_andamento descricao_ptbr
0 2016-06-09 11:03:00
18 2016-06-21 11:37:00 Teste
1006 2016-05-25 16:10:10 Descrição: Mero expediente (19/05/16) Descrição: Mero expediente (19/05/16)
答案 0 :(得分:1)
目前尚不清楚为什么日期和时间是两个单独的列。也许是因为某些情况下它们可能为空。因此,获取两者都给出的记录(并且可能属于一起),将它们组合到一个日期时间并使用它。
select
id_processo,
max(timestamp(data_andamento, hora_andamento))
from andamento_processo
where data_andamento is not null
and hora_andamento is not null
group by id_processo
order by id_processo;
如果您想从具有最大日期时间的记录中获取更多数据,则使用上面作为子查询(派生表)并再次加入该表。
为了完整起见:在IN
子句中使用相同的查询来从记录中获取更多数据:
select *
from andamento_processo
where (id_processo, timestamp(data_andamento, hora_andamento)) in
(
select
id_processo,
max(timestamp(data_andamento, hora_andamento))
from andamento_processo
where data_andamento is not null
and hora_andamento is not null
group by id_processo
)
order by id_processo;
答案 1 :(得分:0)
您可以在group by子句中添加data_andamento。
select a.id_processo, a.data_andamento, a.hora_andamento, a.descricao_ptbr
from andamento_processo a
inner join (
select id_processo, max(data_andamento) as Maxdata_andamento,
max(hora_andamento) as Maxhora_andamento
from andamento_processo
group by id_processo, data_andamento
) am on a.id_processo = am.id_processo and a.data_andamento =
am.Maxdata_andamento and a.hora_andamento = am.Maxhora_andamento
答案 2 :(得分:0)
select a.id_processo,
a.data_andamento,
a.hora_andamento,
a.descricao_ptbr
from andamento_processo a
inner join
(
select id_processo,
max(data_andamento) as Maxdata_andamento
from andamento_processo
group by id_processo,
date_format(data_andamento, '%Y-%m-%d %H')
) am
on a.id_processo = am.id_processo and
a.data_andamento = am.Maxdata_andamento