2016-12-27 11 views
1

私は、法律プロセスの進捗状況の収集項目である表を持っています。どのようにsqlに各ユーザーの最新の日付と時間を照会しますか

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 と私は、各プロセスに最新の日付を取得することができています。

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 
    from andamento_processo 
    group by id_processo 
) am on a.id_processo = am.id_processo and a.data_andamento = am.Maxdata_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 
) 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

トライCONCAT(MAX(data_andamento)、」」、MAX(hora_andamento))。それを余分の列として追加してください。 – Claus

+0

日付と時刻が別々の列にあるのはなぜですか?それは、2人が別のものを参照できることを示していますか?彼らはnullableですか?欠落した日付は、時間が毎日再発生するイベントを表すことを意味しますか?たぶん、これはちょうど悪い表のデザインであり、日付と時刻を1つのdatetimeで置き換える必要があります。 –

+0

テーブルデザインをした人は誰もいなくなりました。あなたが言ったように、これはちょうど悪いテーブルデザインです。すべてに感謝します。 – giancarloap

答えて

1

日時2つの別々の列である理由は明らかではありません。特定のシナリオではnullになる可能性があるためです。だから両方が与えられている(おそらく一緒に属している)レコードを取得し、それらを1つのdatetimeに結合して、これを使って作業します。

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; 
+0

ほぼあります。 id_processoとmax(timestamp(data_andamento、hora_andamento))は完璧ですが、列descricao_ptbrが 'Teste'ではなく間違っています。これは前回日付のレジスタから別の値になります。私はそれを修正しようとしています。どんなアイデアも役に立つでしょう。 – giancarloap

+0

もちろん、 'descricao_ptbr'を集計関数(' MIN'、 'MAX'など)を使わずに選択リストに追加すると、デフォルトで' ANY_VALUE(descricao_ptbr) 'になります。これは、レコードからより多くのデータを取得するために、上記のクエリをテーブルに再度追加する必要があると言った理由です。 (あるいは、私がクリーナーでもあると考える 'IN'節でクエリを使用してください。) –

+0

さて、私はクエリを追加しました。 –

0

group_ clauseに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 
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 
関連する問題