Bash - Add Mysql column name to query result - mysql
I've made a Batch script that does a query to a MYSQL DB then send an email, The problem I have is the query result don't show the name of the column.
#Definimos de correo
# ===================
export SUBJECT="Mediciones_Cumplimiento_de_Calidad-$FECHA"
export SERVER=Conda
# Definimos las variables de ubicación delos archivos utilizados por este script
# ===============================================================================
export DIR=/opt/iway/scripts/envio_mediciones
export LOG_FILE=${DIR}/envio_mediciones.log
export CONSULTA_MEDICIONES=${DIR}/mediciones_conda.sql
export MAIL_FILE=${DIR}/mediciones.mail
export SALIDA_MEDICIONES=${DIR}/Mediciones_Cumplimiento_de_Calidad-$FECHA.csv
export TEMP_FILE=${DIR}/temporal
export MAX_LOG_FILE_SIZE=5000
#Definido el nombre del ZIP:
SALIDA_ZIP="Mediciones_Cumplimiento_de_Calidad-${FECHA}.zip"
# Limpiamos el archivo que contiene el cuerpo del mail y le ponemos un encabezado
# ===============================================================================
${ECHO} subject: ${SUBJECT} > ${MAIL_FILE}
${ECHO} ${SUBJECT} >> ${MAIL_FILE}
${ECHO} "===================================" >> ${MAIL_FILE}
${ECHO} >> ${MAIL_FILE}
# Ejecutamos las Query's
# ======================
########################################################################################################
${MYSQL} < ${CONSULTA_MEDICIONES} > ${SALIDA_MEDICIONES}
${ZIP} ${SALIDA_ZIP} -j ${SALIDA_MEDICIONES}
${UUENCODE} ${SALIDA_ZIP} ${SALIDA_ZIP} >> ${MAIL_FILE}
${CAT} ${MAIL_FILE} |${SENDMAIL} -F ${REMITENTE} ${DESTINATARIOS}
This is the mysql query:
SELECT
CONCAT(HO.codigosonda,',') AS 'SONDA',
CONCAT(HO.host ,',') AS 'ID AGENTE',
CONCAT(CONCAT(HD.country, HD.state),',') AS 'UBICACIÓN',
CONCAT(P.planname,',') AS 'PLAN DE SERVICIO',
CONCAT(FROM_UNIXTIME(H.`clock`),',') AS 'FECHA DE MEDICIÓN',
CONCAT(I.`descriptionLong`,',') AS 'KPI',
CONCAT(ROUND(H.`value` / 1024 / 1024, 0),',') AS 'MEDICION( Mbps )'
FROM
`bm_history` H
INNER JOIN
`bm_items` I ON H.`id_item` = I.`id_item`
INNER JOIN
`bm_host` HO ON HO.`id_host` = H.`id_host`
INNER JOIN
`bm_plan` P ON P.id_plan = HO.id_plan
LEFT JOIN
`zold_host_features` HD ON HD.`id_host` = H.`id_host`
WHERE
(H.`clock` BETWEEN UNIX_TIMESTAMP(CONCAT(CURDATE() - INTERVAL 1 DAY, ' 00:00:00')) AND UNIX_TIMESTAMP(CONCAT(CURDATE() - INTERVAL 1 DAY, ' 23:59:59')))
AND HO.`groupid` = 6
AND H.`id_item` IN (3867 , 3855)
ORDER BY `clock` DESC
The result is not giving me the Column names just the data how can I add that information?
Related
error about negative ou NA values in a array when using absolute values
a = 2; epsilon = 1e-10; t0 = 1; N = 20; function t = metodoDeNewton(a, t0, N, epsilon) t = zeros(1, N+1); t(1) = t0; for i = 1:N t(i+1) = t(i) - (t(i)^2 - (a - sin(t(i)))) / (2 * t(i) - cos(t(i))); if (abs(t(i+1) - t(i)) < epsilon) break; endif endfor endfunction t = metodoDeNewton(a, t0, N, epsilon); % Mostra a última iteração, que é a aproximação da raiz da equação disp(t(end)); % Estima a ordem de convergência e o coeficiente assintótico de convergência % Para isso, calcula a razão entre duas iterações consecutivas e a razão entre % o erro absoluto dessas iterações e o erro absoluto das iterações anteriores r = zeros(1, length(t) - 1); k = zeros(1, length(t) - 1); for i = 2:length(t) r(i-1) = t(i) / t(i-1); k(i-1) = (abs(t(i) - t(i-1))) / (abs(t(i-1) - t(i-2))); endfor % Mostra a razão e o coeficiente assintótico de convergência x = disp(r(end)); y = disp(k(end)); This code gives me the error error: t(0): subscripts must be either integers 1 to (2^63)-1 or logicals I understand this is because my k variable calculates a negative integer maybe, and I don't really understand why, since my values will allways be positive. I thought that maybe it's because the for loop might be trying to calculate NA values, but even so, how do I fix that?
pandas query a grouping within a grouping
Having trouble writing a query where I can get the top 10 of a top 10 based on a count My starting table from this query: top_10_cars = 'CH', 'DA', 'AG', 'DC', 'LA', 'NY', 'SA', 'SE', 'DE', 'MI' df = pd.read_sql("select\ count(*) as count\ ,ID\ ,CAR\ from "+db+"\ where pop in ('"+ "','".join(top_10_cars) +"')\ group by\ pop\ ,asn\ order by reqs desc\ ",conn) Result is a list with all the IDs for every car grouping sorted by count: Count ID CAR 67210048 7922 CH 2081655 20001 LA 488850583 7018 AG 567585985 7018 DA 450991 7922 SA 41123124 7018 CH 4135532 11427 DA ... .. . The dataframe above is too big. I only one that top 10 Ids for each car. For example CH: Count ID CAR 67210048 7922 CH 25100548 7546 CH 465100 8542 CH 67254828 5622 CH 1251048 3522 CH ... .. . The resulting table should look like this Count ID CAR 67210048 7922 CH 25100548 7546 CH .. . 7210048 1546 DA 251005 5678 DA 25100548 7546 DA 465100 8542 DA ... .. 67254828 5622 DA and so on.. 'AG', 'DC', 'LA', 'NY', 'SA', 'SE', 'DE', 'MI'
This is probably not the correct way to do this but I just wrapped it some python: df = pd.DataFrame() for x in top_NA_cars: dftemp = pd.read_sql("select\ count(*) as count\ ,ID\ ,CAR\ from "+db+"\ where CAR in ('"+x+"')\ group by\ ID\ ,CAR\ order by count desc limit 10",conn) df = df.append(dftemp) Open to better solutions but ^ did work.
how to format mysql float into sytem local values or decimal comma for a reportlab billing system
I have a Reportlab form for a billing system and it works good. But what I want to get are the values in sytem local values, with decimal comma, or separator; something as next instead as shown in the picture: 1,350,000.00 I'd like something like FORMAT in MySQL, but the problem with this one is that it does'nt let me to sum the values to get the total because it returns the values as string. SELECT FORMAT (columna, 'es_CO') FROM tabla; How my form looks like And my Python code: Just retefuente, ivajuridico, rteiva and i_vlrenta are float in mysql #!/usr/bin/python #-*- coding:utf-8 -*- from Tkinter import* from tkMessageBox import* import MySQLdb from controller import * import analisis_arrendatarios import os import datetime import time import locale locale.setlocale(locale.LC_ALL, "") #LIBRERÍA PLATYPUS DE REPORTLAB PARA CREAR TABLAS from reportlab.platypus import (SimpleDocTemplate, PageBreak, Image, Spacer, Paragraph, Table, TableStyle) from reportlab.lib.styles import getSampleStyleSheet from reportlab.lib.pagesizes import letter from reportlab.lib import colors styleSheet = getSampleStyleSheet() style = styleSheet['BodyText'] class Proceso_Fact_Auto_Arre(Frame): def __init__(self, parent, controller): Frame.__init__(self, parent) global opt #VARIABLES opt = IntVar() #WIDGETS header = Label(self, text="TENANTS AUTO BILLING PROCESS", font="bold") header.pack(pady=20, side=TOP) wrapper = Frame (self) wrapper.pack() r1 = Radiobutton(wrapper, text="Generate Analysis", variable=opt, value=0).pack(pady=5, anchor=W) r2 = Radiobutton(wrapper, text="Generate Billings", variable=opt, value=1).pack(pady=5, anchor=W) Button(wrapper, text="Iniciar Proceso", bg='navy', foreground='white', activebackground='red3', activeforeground='white', command=operacion).pack(pady=5, anchor=W) def operacion(): if opt.get()==0: showinfo('Operation', "Generate Analysis") try: connect.commit() #Consulta de códigos y valores de la tabla 'configuracion' cursor.execute("SELECT cod_canon, cod_subtotalarrend, cod_ivaarrend, retefuente, ivajuridico, rteiva, resolucion FROM configuracion;") dato1 = cursor.fetchall() #Consulta de datos generales del propietario y el arrendatario para la factura cursor.execute("SELECT p_cc, dueño, r_carpeta, relacionip.i_cod, i_dir, i_vlrenta, i_tel, contratos.a_cc, inquilino, a_tpersona, a_contribuyente FROM contratos INNER JOIN relacionip ON contratos.r_id = relacionip.r_id INNER JOIN inmuebles ON relacionip.i_cod = inmuebles.i_cod INNER JOIN arrendatarios ON contratos.a_cc = arrendatarios.a_cc;") #cursor.execute("SELECT p_cc, dueño, r_carpeta, relacionip.i_cod, i_dir, FORMAT(SUM(i_vlrenta), 2,'es'), i_tel, contratos.a_cc, inquilino, a_tpersona, a_contribuyente #FROM contratos #INNER JOIN relacionip ON contratos.r_id = relacionip.r_id #INNER JOIN inmuebles ON relacionip.i_cod = inmuebles.i_cod #INNER JOIN arrendatarios ON contratos.a_cc = arrendatarios.a_cc;") dato2 = cursor.fetchall() except: pass for c in dato1: canon = c[0] subtotal = c[1] iva = c[2] retef = c[3] ivajuridi = c[4] retei = c[5] resolucion = c[6] doc = SimpleDocTemplate("facturas/factura_auto_inquilino.pdf", pagesize = (595.27,400.00), rightMargin=5, leftMargin=5, topMargin=10, bottomMargin=0) story=[] for i in dato2: nit = i[0] prop = i[1] folder = i[2] inm = i[3] loc = i[4] renta = i[5] tel = i[6] cc = i[7] arrend = i[8] tipo = i[9] contri = i[10] #SI ARREND ES NATURAL(1) if tipo == 1: tipo = 0 #SI ARREND ES JURÍDICO(2) if tipo == 2: tipo = renta*ivajuridi/100 total = renta+tipo tiempo = datetime.date.today() anio = time.strftime("%Y") mes = time.strftime("%B") #-------------------------------------------- CABECERA DEL DOCUMENTO #VARIABLES logo = Image("img/logo.gif", width=150, height=45) #LOGO logo.hAlign ='LEFT' #Posicion de la img en la hoja info = Paragraph('''<para align=center leading=8><font size=6>CALLE 11A N°42-68 LOC,195 ED. EL DORADO<br/>TELEFONO: 3110513 FAX:2664154<br/>AFILIADO A FENALCO<br/>M.A.V.U N°000078</font></para>''', styleSheet["BodyText"]) tipoDoc = Paragraph ('''<para align=right><b>FACTURA DE VENTA<br/>N°</b></para>''', styleSheet["BodyText"]) #TABLA 1 tabla1 = Table([[logo, info, tipoDoc]], colWidths=[200,150,140], rowHeights=None) tabla1.setStyle([ ('VALIGN', (1,0), (2,0), 'TOP'), ('ALIGN', (2,0), (2,0), 'RIGHT')#ALINEAR A LA DER ]) story.append(tabla1) #Construye la tabla 't' definida anteriormente story.append(Spacer(0,-10)) #Espacio del salto de línea con el siguiente Ejemplo #-------------------------------------------- DATOS GENERALES DEL DOCUMENTO #VARIABLES inquilino = Paragraph ('''<font size=6><b>Nombre Arrendatario:</b><br/></font>%s'''%arrend, styleSheet["BodyText"]) docID = Paragraph ('''<font size=6><b>CC/Nit: </b></font> %s''' %nit, styleSheet["BodyText"]) locImn = Paragraph ('''<font size=6><b>Dirección Inmueble:</b><br/></font>%s'''%loc, styleSheet["BodyText"]) telefono = Paragraph ('''<font size=6><b>Teléfono:</b><br/></font>%s'''%tel, styleSheet["BodyText"]) IDpropietario = Paragraph ('''<font size=6><b>CC/Nit:</b><br/></font>%s'''%cc, styleSheet["BodyText"]) propietario = Paragraph ('''<font size=6><b>Propietario: </b></font>%s'''%prop, styleSheet["BodyText"]) fechaFormato = Paragraph ('''<para align=center fontSize=6>Día Mes Año</para>''', styleSheet["BodyText"]) hoy = time.strftime("%d/%m/%Y") fecha = Paragraph ('''<para align=center spaceBefore=0>%s</para>''' %hoy, styleSheet["BodyText"]) codigoImn = Paragraph ('''<font size=6><b>Código Inmueble:</b><br/></font>%s'''%inm, styleSheet["BodyText"]) #TABLA 2 datos = [[inquilino,'','','','',[fechaFormato,fecha]], [docID,'','',propietario,'',''], [locImn,'',telefono,IDpropietario,'',codigoImn]] tabla2 = Table(datos, style=[('BOX',(0,0),(2,2),0.5,colors.black), ('VALIGN', (0,0),(2,0),'TOP'), ('SPAN',(0,0),(2,0)),#Combinar 3 filas (col0,row0) hasta (col2,row0) Arrendatario #0 ('SPAN',(0,1),(2,1)),#Combinar 3 filas CC/Nit #1 ('SPAN',(0,2),(1,2)),#Combinar 2 filas Dirección #2 ('SPAN',(3,1),(5,1)),#Combinar 3 filas Nombre Propietario # ('SPAN',(3,2),(4,2)),#Combinar 2 filas CC/Nit Propietario # ('GRID',(3,1),(4,2),0.5,colors.black), ('GRID',(5,0),(5,2),0.5,colors.black) ],colWidths=[100,90,90,90,80,70], rowHeights=None) #Constructor y espaciado story.append(Spacer(0,15)) #Espacio del salto de línea con el siguiente Ejemplo story.append(tabla2) #Construye la tabla 't' definida anteriormente #-------------------------------------------- DETALLES DEL DOCUMENTO #VARIABLES desc = Paragraph('''<para align=center><b>DESCRIPCION</b></para>''', styleSheet["BodyText"]) vlr = Paragraph('''<para align=center><b>VALOR</b></para>''', styleSheet["BodyText"]) concepto = Paragraph('''Valor Arrendamiento Mes: %s/%s''' % (mes,anio), styleSheet["BodyText"]) resol = "Resolucion Dian N°110000658514 de Diciembre de 2015 Consectivo Facturacion 33001 al 36000. P" #TABLA 3 data=[[desc, '', vlr], #0 [concepto, '', renta], #1 ['', '', ''], #2 ['', '', ''], #3 ['', '', ''], #4 ['', '', ''], #5 ['', '', ''], #6 ['Observaciones', 'SUBTOTAL', renta], #7 ['', 'IVA', tipo], #8 [resolucion, 'TOTAL', total]] #9 #Formato de la tabla tabla3 = Table(data, style=[('GRID',(0,0),(2,0),0.5,colors.black),#Color regilla de DESCRIPCION & VALOR ('BOX',(2,1),(2,9),0.5,colors.black), #Color & grosor de la tabla/marco externo de los VALORES #('BACKGROUND',(0,0),(2,0), colors.pink), #Color de fondo de DESCRIPCION & VALOR #0 ('SPAN',(0,0),(1,0)), #Combinar filas DESCRIPCION #0 ('BOX',(0,1),(2,6),0.5,colors.black), #Color & grosor de la tabla o marco externo de los DETALLES ('ALIGN', (2,1), (2,1), 'RIGHT'),#Centrar renta #1 ('ALIGN', (2,7), (2,7), 'RIGHT'),#Centrar renta #7 ('ALIGN', (2,8), (2,8), 'RIGHT'),#Centrar tipo #8 ('ALIGN', (2,9), (2,9), 'RIGHT'),#Centrar total #9 #('ALIGN', (2,9), (2,9), 'CENTER'),#Centrar total #9 ('SPAN',(0,1),(1,1)), #Combinar filas de Detalle #1 ('SPAN',(0,2),(1,2)), #Combinar filas de Detalle #2 ('SPAN',(0,3),(1,3)), #Combinar filas de Detalle #3 ('SPAN',(0,4),(1,4)), #Combinar filas de Detalle #4 ('SPAN',(0,5),(1,5)), #Combinar filas de Detalle #5 ('SPAN',(0,6),(1,6)), #Combinar filas de Detalle #6 ('GRID',(1,7),(2,9),0.5,colors.black),#Color regilla de SUBTOTAL, IVA, TOTAL ('BOX',(0,7),(0,9),0.5,colors.black), #Color & grosor de la tabla o marco externo de los OBSERVACIONES Y RESOLUCION ('FONTSIZE', (0,9),(0,9),7), #Tamaño de la Resolucion #('BACKGROUND',(1,9),(1,9),colors.black),#Color de fondo de TOTAL ('TEXTCOLOR',(1,9),(1,9),colors.black), #Color de letra de TOTAL #('BACKGROUND',(2,9),(2,9),colors.grey)#Color de fondo de VALOR TOTAL ],colWidths=[340,80,100], rowHeights=None) story.append(Spacer(0,15)) #Espacio del salto de línea con el siguiente Ejemplo story.append(tabla3) #Construye la tabla 't' definida anteriormente #-------------------------------------------- FIN PDF doc.build(story) #Constructor del documento if sys.platform == 'linux2': os.system("xdg-open ~/Project/facturas/factura_auto_inquilino.pdf")#DEBIAN elif sys.platform == 'linux2': os.system("/usr/bin/gnome-open facturas/factura_auto_inquilino.pdf")#UBUNTU else: os.startfile("Project/facturas/factura_auto_inquilino.pdf")#WINDOWS else: #Code to insert data into a billinf table)
SELECT FORMAT(SUM(columna), 2, 'es_CO') FROM tabla; For example: mysql> SELECT FORMAT(SUM(population), 3, 'es_CO') FROM canada; +-------------------------------------+ | FORMAT(SUM(population), 3, 'es_CO') | +-------------------------------------+ | 23584718,000 | +-------------------------------------+ 1 row in set (0.01 sec) I suspect you wanted something like | 23.584.718,000 | Then I suggest you file a bug with bugs.mysql.com . It seems that the 'grouping separator' is incorrect? Meanwhile, will 'es' (instead if 'es_CO') work correctly enough?
As some guys suggested, what I had to do was: sum the values, which was already done in my code, add a new variable appling a format with 'locale.format', and then just place that variable in the corresponding place in the reportlab form. For the total value it was not necessary to create a new variable, but just apply locate. So, I added to my code something like this: for i in dato2: #... renta = i[5] #New var to show value with thousands separator in the form renta1 = locale.format("%d", renta, grouping=True) tipo = i[9] #SI ARREND ES NATURAL(1) if tipo == 1: tipo = 0 #New var to show value with thousands separator in the form tipo1 = locale.format("%d", tipo, grouping=True) #SI ARREND ES JURÍDICO(2) if tipo == 2: tipo = renta*ivajuridi/100 #New var to show value with thousands separator in the form tipo1 = locale.format("%d", tipo, grouping=True) total = locale.format("%d", renta+tipo, grouping=True) #REPORTLAB FORM TABLA 3 data=[[desc, '', vlr], #0 [concepto, '', renta], #1 ['', '', ''], #2 ['', '', ''], #3 ['', '', ''], #4 ['', '', ''], #5 ['', '', ''], #6 ['Observaciones', 'SUBTOTAL', renta], #7 ['', 'IVA', tipo], #8 [resolucion, 'TOTAL', total]] #9
Extract with mysql
I have a table (incident) with a column (update_Action) that contains information. Among this information the names are enclosed in parenthesis. 06/01/15 09:49:17 Tunisia (Hamed.Ghabi): 05/01/15 13:14:11 Tunisia (sabri.zayet): reset des TREs 05/01/15 09:38:50 Tunisia (Hamed.Ghabi): Pb persiste. Cdt,Hamed 02/01/15 14:37:45 Tunisia (khaled.rajhi): Restart cell Cdt, Khaled Question: my goal is to extract these names is to store them in another column (intervenants) in the same table. update incident set intervenants= (substring(Update_Action,locate('(',Update_Action),locate(')',Update_Action))) where Status='Closed' But I got the following result: (Hamed.Ghabi): 05/01/15 13:14:11 Tunisi, instead of: Hamed.Ghabi,Sabri.Zayet,Khaled.Rajhi. picture of the table: !06/01/15 09:49:17 Tunisia (Hamed.Ghabi): 05/01/15 13:14:11 Tunisia (sabri.zayet): reset des TREs 05/01/15 09:38:50 Tunisia (Hamed.Ghabi): Pb persiste. Cdt,Hamed 02/01/15 14:37:45 Tunisia (khaled.rajhi): Restart cell Cdt, Khaled 05/01/15 09:42:40 Tunisia (Hamed.Ghabi): 02/01/15 14:38:00 Tunisia (khaled.rajhi): Restart cell Cdt, Khaled 26/01/15 09:14:56 Tunisia (Hamed.Ghabi): 23/01/15 11:30:46 Tunisia (walid.hadjtaieb): prière de vérifier l’état suite intervention maintenance. il parait que le problème est résolu (en attache) 13/01/15 11:43:19 Tunisia (nabil.zarrad): Merci d'attacher le résultat des mesures PIM sur SM9 (pour garder l'historique des actions). 12/01/15 16:35:10 Tunisia (fethi.nasri): Résultat mesure PIM envoyé. 07/01/15 17:53:49 Tunisia (walid.hadjtaieb): prière de planifier une mesure PIM sur S2 06/01/15 09:46:34 Tunisia (
You could create a function to extract the text in the parenthesis: EDIT: removed an unnecessary variable + general cleanup. DELIMITER $$ CREATE FUNCTION `extractWordInParenthesis`(strIn varchar(500)) RETURNS varchar(500) BEGIN declare textString varchar(500) default strIn; declare extractedString varchar(500) default ''; declare newOccurence varchar(500) default ''; while length(textString) <> length(replace(textString,')','')) do set newOccurence = substr(textString, locate('(', textString)+1, locate(')', textString)-locate('(', textString)-1); -- check if the specific occurence have already been found if length(extractedString) = length(replace(extractedString,newOccurence,'')) then set extractedString = concat(extractedString, ',', newOccurence); end if; set textString = substr(textString,locate(')', textString)+1); end while; RETURN substr(extractedString,2); END$$ DELIMITER ; This would be called like: select extractWordInParenthesis(Update_Action) from incident where Status = 'Closed'; And the update: update incident set intervenants = extractWordInParenthesis(Update_Action) where Status = 'Closed';
MySQL sort query by specific letters
I've a mysql table with a lot of folderNames and Directory names, for Example "C:\xx\xyz" or "C:\xx" or "C:\xx\xyz\abc". Now I have to sort this Query by the count of this Backslashes. I need the Dir C:\xx as first, because I have to create this Directory before I can create a sub-dir in it. How can I do this?
Something like this: SELECT dirName FROM yourTable ORDER BY (LENGTH(dirName) - LENGTH(REPLACE(dirName, '\\', '')))
SQLFillde demo ORDER BY LENGTH(folder)-LENGTH(REPLACE(folder,'\\',''))
It's often not necessary to create directories in order: C:\>mkdir test C:\>dir test El volumen de la unidad C es Sistema El número de serie del volumen es: 6882-2759 Directorio de C:\test 15/02/2013 12:01 <DIR> . 15/02/2013 12:01 <DIR> .. 0 archivos 0 bytes 2 dirs 115.358.355.456 bytes libres C:\>mkdir test\foo\bar\one\two\three C:\>dir test El volumen de la unidad C es Sistema El número de serie del volumen es: 6882-2759 Directorio de C:\test 15/02/2013 12:02 <DIR> . 15/02/2013 12:02 <DIR> .. 15/02/2013 12:02 <DIR> foo 0 archivos 0 bytes 3 dirs 115.358.355.456 bytes libres C:\>