Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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:
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 |
Resultado esperado:
Cliente | Data | Temp_A_Max | Temp_B_Max | Temp_C_Max |
Joao | 23/07/2020 | 23 | 58 | 25 |
Carlos | 23/07/2020 | 98 | 65 | 97 |
Joao | 24/07/2020 | 102 | 104 | 33 |
Carlos | 24/07/2020 | 125 | 97 | 33 |
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!
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.
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:
Caso de certo, não esqueça de marcar como resposta correta.
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.
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.