Como buscar dados da data anterior no shell script?

Como buscar dados da data anterior no shell script?

Por favor, consulte o script abaixo.

#!/usr/bin/bash

#scirpt to connect with db

master_db_user=''
master_db_passwd=''
master_db_port='3306'
master_db_host=''
master_db_name='uppcldashboard'

Now=$(date +"%d-%m-%Y")
date=$(date +"%F")


#Preparing script

#SQL_Query='select * from test_table;'

#MySql Command to connect to a database

#mysql -u$master_db_user -p$master_db_passwd -D$master_db_name -e "select * from uppcl_amount_details into outfile '/created_files/uppcl.csv' fields terminated by ',' lines terminated by '\n';"

mysql -u$master_db_user -p$master_db_passwd -D$master_db_name -e "select *,IFNULL(ref_4,0),IFNULL(ref_3,0),IFNULL(ref_7,0),IFNULL(ref_8,0),date_format(posting_date,'%Y-%m-%d') from uppcl_amount_details where posting_date>=CURDATE() into outfile '/created_files/uppcl.csv' fields terminated by ',' lines terminated by '\n';"

mv /created_files/uppcl.csv /created_files/offline_collection$Now.csv

sed -i "1i id","Cashier_id","Cheque_no","collection_amount","collection_type","Posting_date","Discom","Division_Code","Division_Name","Head_cashier_id","ref_3","ref_4","ref_5","ref_6","ref_7","ref_8","Tran_Date","Status","Posting_Updated_Date" /created_files/offline_collection$Now.csv
echo "End of the Script"

Ok, então este script basicamente busca dados de um servidor MySQL daquela data atual e eu tenho que agendar esse script para que ele busque dados dessa data atual. mas aqui está o problema de que os dados chegam de maneira contínua, então não posso simplesmente agendá-los para as 2 da manhã porque os dados serão inseridos no servidor MySQL até as 2 da manhã, então pensei em duas soluções alternativas. os dados da data anterior, por exemplo, hoje são 16/04/2020, portanto, se o script for executado hoje às 2h da manhã, ele buscará os dados de 15/04/2020.

ou

Eu programo esse roteiro para o final do dia, tipo 23h58 ou algo assim.

Na sua opinião qual é a melhor maneira também você pode me informar o cronjob para as 23h58.

se eu considerar obter dados da data anterior, deverão ser feitas alterações para obtê-los.

Obrigado e cumprimentos, Sagar Mandal

Responder1

No seu caso, eu definitivamente limitaria a consulta de forma que você obtenha registros de um dia, independentemente de quando a consulta for iniciada. Dessa forma, você pode iniciá-lo às 2h ou quando quiser. Dessa forma, você pode executar o script manualmente mais tarde se algo der errado no momento em que deveria ser executado.

No seu script, altere a condição where para algo assim:

where DATE(posting_date) = DATE(DATE_ADD(CURDATE(), INTERVAL -1 DAY))

Dessa forma, você obtém apenas registros com data de ontem.

Se você quiser fazer isso com variáveis ​​​​bash, obtenha a data atual em um formato adequado para MySql:

date=$(date --rfc-3339=date)

A saída para $dateestá no formato reconhecível para MySql:

2020-04-16

Em seguida, faça uma condição where mais ou menos assim:

where DATE(posting_date) = DATE(DATE_ADD('$date', INTERVAL -1 DAY))

Se você alterar o interval -1 day, poderá obter os dados de qualquer dia que desejar.


E mais uma coisa. Não forneça nomes de usuário e senhas para MySql a partir de scripts. Dessa forma, as senhas são reveladas e mais cedo ou mais tarde você se arrependerá. Usar mysql_config_editor(https://dev.mysql.com/doc/refman/8.0/en/mysql-config-editor.html) para armazenar credenciais e usá-las posteriormente em um script como o seu.

informação relacionada