Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
joao_lucas
Contributor II
Contributor II

Máximo de diário via script

Pessoal, boa tarde

 

Estou com problemas em carregar uma tabela gigante que tenho, para saber os valores máximos de cada dia de temperatura, resumi a base de dados que tenho, para exemplificar melhor, as vezes preciso ter o máximo diário, e semanal segue o arquivos:

ClienteDataData\HoraTemp_ATemp_BTemp_C
Carlos23/07/202023/07/2020 07:13474897
Carlos23/07/202023/07/2020 09:13986544
Carlos24/07/202024/07/2020 23:13239733
Joao24/07/202024/07/2020 10:51412733
Joao23/07/202023/07/2020 08:13234825
Joao23/07/202023/07/2020 15:21155819
Joao24/07/202024/07/2020 20:0210210412
Carlos24/07/202024/07/2020 02:13125792

 

Resultado esperado:

 

ClienteDataTemp_A_MaxTemp_B_MaxTemp_C_Max
Joao23/07/2020235825
Carlos23/07/2020986597
Joao24/07/202010210433
Carlos24/07/20201259733

 

Segue meu script:

Dados:
LOAD Cliente,
date(Floor(Data\Hora)) as Data,
Data\Hora,
Temp_A,
Temp_B,
Temp_C
FROM
[C:\Users\João Lucas\Downloads\Dados.txt]
(txt, codepage is 1252, embedded labels, delimiter is ';', msq);

Load

Max(Temp_A) as Temp_A_Max,
Max(Temp_B) as Temp_B_Max,
Max(Temp_C) as Temp_C_Max

Resident Dados
Where(Data='23/07/2020' and Data='24/07/2020')
Group by Cliente;

Obrigado pela ajuda galera!

 

4 Replies
TiagoCardoso
Creator II
Creator II

Boa noite!

Você quer fazer isso somente via script?

Creio que seria mais vantajoso para você fazer esses cálculos em uma tabela. O que acha?

Pois no script como está ali ele não irá agrupar por data ou por cliente, você simplesmente carrega um máximo, sem condições.

Caso queira fazer via script, sugiro que traga o campo da data para ele agrupar pela data. Se mesmo assim não der, agrupe também pelo cliente.

Caso queira fazer via tabela, faça a carga total e esqueça o LOAD RESIDENT ali, e use a expressão MAX para os campos que quiser calcular na tabela, utilizando o campo cliente e data para fazer o devido agrupamento.

danilostochi
Creator II
Creator II

Veja se isso pode lhe ajudar.

dados:
LOAD * INLINE [
Cliente, Data, Data_Hora, Temp_A, Temp_B, Temp_C
Carlos, 23/07/2020, 23/07/2020 07:13, 47, 48, 97
Carlos, 23/07/2020, 23/07/2020 09:13, 98, 65, 44
Carlos, 24/07/2020, 24/07/2020 23:13, 23, 97, 33
Joao, 24/07/2020, 24/07/2020 10:51, 41, 27, 33
Joao, 23/07/2020, 23/07/2020 08:13, 23, 48, 25
Joao, 23/07/2020, 23/07/2020 15:21, 15, 58, 19
Joao, 24/07/2020, 24/07/2020 20:02, 102, 104, 12
Carlos, 24/07/2020, 24/07/2020 02:13, 125, 79, 2
];

NoConcatenate
dados2:
LOAD
Cliente,
Data,
Max(Temp_A) as Temp_A,
Max(Temp_B) as Temp_B,
Max(Temp_C) as Temp_C


Resident dados
Group by
Cliente,
Data
order by
Data,
Cliente asc ;

DROP Table dados;

 

 

Resultado:

danilostochi_0-1595817487622.png

 

Caso de certo, não esqueça de marcar como resposta correta.

 

 

+55(44) 9 9993-3605, WhatsApp
E-Mail or Skype - danilo16stochi@hotmail.com
joao_lucas
Contributor II
Contributor II
Author

Uma tabela inline acredito que não seria possível, por que tenho mais de 7 mil clientes e mais de 3 meses de dados diários com quase 20 informações por dia....alguma outra alternativa? Esses dados foram só um exemplo, a base é muito maior.

TiagoCardoso
Creator II
Creator II

Conforme comentei. Você pode fazer isso via interface, ou realmente quer que seja somente via SCRIPT?

 

*Via interface você pode adicionar a data e o cliente como dimensão em uma tabela e ir colocando as próximas colunas como expressões, no caso, MAX(valor_a),MAX(valor_b),MAX(valor_c).

*Via Script seria basicamente isso que o colega falou acima. Carregar todos e depois ir separando e agrupando em outra tabela, para você "não precisar fazer nada" de cálculos em tela, ficando tudo no script. Mas a vantagem é que caso você precise somente dos valores máximos, após separar eles, você pode dar DROP na tabela mão e ficar somente com o que te interessa de fato. 

E sobre você achar ser inviável pela quantidade de dados, dá uma pesquisada sobre carga incremental que vai te ajudar a não trazer tudo, toda vez que o script for carregado.