存储的文件在哪里?(下面代码 查询不对 保存好用)
%load_ext sql
# 定义 SQL 查询语句
sql_query = """
-- 子查询获取所有机构和用户的组合
WITH all_org_user AS (
SELECT DISTINCT COD_BRCH_OU_TR, ID_INTL_USER_TR
FROM P_34TPUP_UCAP_TERM_JRN_INFOA
),
-- 子查询获取下午 2 点前进行 61606 操作的机构和用户组合
operated_org_user AS (
SELECT DISTINCT COD_BRCH_OU_TR, ID_INTL_USER_TR
FROM P_34TPUP_UCAP_TERM_JRN_INFOA
WHERE SUBSTR(TIME_START_TR, 12, 8) < '14:00:00'
AND COD_TR_BOEC_CLI = 61606
)
-- 主查询找出没有在下午 2 点前进行 61606 操作的机构和用户
SELECT ao.COD_BRCH_OU_TR, ao.ID_INTL_USER_TR
FROM all_org_user ao
LEFT JOIN operated_org_user oo ON ao.COD_BRCH_OU_TR = oo.COD_BRCH_OU_TR AND ao.ID_INTL_USER_TR = oo.ID_INTL_USER_TR
WHERE oo.COD_BRCH_OU_TR IS NULL;
"""
# 执行查询
result = %sql $query
# # 处理查询结果
# if result:
# print("查询到的数据如下:")
# for row in result:
# print(row)
# else:
# print("未查询到数据。")
import os
import pandas as pd
# ... 前面查询数据的代码保持不变 ...
try:
# 将查询结果转换为 pandas DataFrame
df = result.DataFrame()
# 显示 DataFrame
if not df.empty:
print("未在下午 2 点前进行 61606 操作的机构和用户如下:")
display(df)
# 打印 ID_INTL_USER_TR 列的值
print("ID_INTL_USER_TR 列的值如下:")
print(df['ID_INTL_USER_TR'].to_csv(sep='\n', na_rep='nan'))
print(df['ID_INTL_USER_TR'].to_csv(sep='\n', na_rep='nan'))
"""下面逐步分析这行代码的各个部分:
df['ID_INTL_USER_TR']:
df 是一个 pandas 的 DataFrame 对象,它代表了从数据库查询得到的数据表。df['ID_INTL_USER_TR'] 是对 DataFrame 进行列索引操作,目的是选取 ID_INTL_USER_TR 这一列的数据,最终返回一个 pandas 的 Series 对象,该对象包含了 ID_INTL_USER_TR 列的所有值。
.to_csv(sep='\n', na_rep='nan'):
to_csv() 是 pandas 的 Series 和 DataFrame 对象都具备的方法,原本是用于将数据保存为 CSV(逗号分隔值)文件的。不过,当不指定文件路径时,它会将数据以字符串的形式返回。
sep='\n':sep 参数用于指定数据的分隔符,这里将分隔符设置为换行符 \n,这意味着每个数据值都会单独占一行。
na_rep='nan':na_rep 参数用于指定缺失值(NaN)的替代表示,这里将缺失值表示为字符串 'nan',这样在输出中缺失值就会显示为 nan。
print(...):最后使用 print() 函数将 to_csv() 方法返回的字符串输出到控制台,这样就可以在控制台看到 ID_INTL_USER_TR 列的每个值,每个值单独占一行,缺失值显示为 nan。"""
# 明确指定保存路径
save_path = '/home/mole/work/zyy/output1.xlsx'
# 创建保存目录(如果不存在)
save_dir = os.path.dirname(save_path)
if not os.path.exists(save_dir):
os.makedirs(save_dir)
print(f"开始导出数据到 {save_path}...")
df.to_excel(save_path, index=False)
print(f"数据已成功导出到 {save_path} 文件。")
else:
print("所有机构和用户都在下午 2 点前进行了 61606 操作,没有数据可导出。")
except AttributeError:
print("查询结果不是预期的对象类型,请检查数据库连接和查询语句。")
except Exception as e:
print(f"导出文件时出现错误:{e}")
整体功能概述
这个 SQL 查询的主要目的是从 P_34TPUP_UCAP_TERM_JRN_INFOA
表中找出那些在下午 2 点之前没有进行 61606
操作的机构和用户组合。
代码详细解释
收起
sql
-- 子查询获取所有机构和用户的组合
WITH all_org_user AS (
SELECT DISTINCT COD_BRCH_OU_TR, ID_INTL_USER_TR
FROM P_34TPUP_UCAP_TERM_JRN_INFOA
),
WITH all_org_user AS (...)
:这是一个公共表表达式(CTE),也被称为临时命名结果集。它允许你为一个子查询定义一个名称(这里是all_org_user
),方便在后续的查询中引用。SELECT DISTINCT COD_BRCH_OU_TR, ID_INTL_USER_TR
:从P_34TPUP_UCAP_TERM_JRN_INFOA
表中选择COD_BRCH_OU_TR
(机构编号)和ID_INTL_USER_TR
(用户编号)这两列。DISTINCT
关键字用于确保结果集中的每一行都是唯一的,避免重复的机构 - 用户组合。FROM P_34TPUP_UCAP_TERM_JRN_INFOA
:指定数据来源表为P_34TPUP_UCAP_TERM_JRN_INFOA
。
收起
sql
-- 子查询获取下午 2 点前进行 61606 操作的机构和用户组合
operated_org_user AS (
SELECT DISTINCT COD_BRCH_OU_TR, ID_INTL_USER_TR
FROM P_34TPUP_UCAP_TERM_JRN_INFOA
WHERE TIME(TIME_START_TR) < '14:00:00'
AND COD_TR_BOEC_CLI = 61606
)
operated_org_user AS (...)
:另一个公共表表达式,命名为operated_org_user
,用于筛选出在下午 2 点之前进行了61606
操作的机构和用户组合。SELECT DISTINCT COD_BRCH_OU_TR, ID_INTL_USER_TR
:同样选择COD_BRCH_OU_TR
和ID_INTL_USER_TR
列,并确保结果集的唯一性。FROM P_34TPUP_UCAP_TERM_JRN_INFOA
:指定数据来源表。WHERE TIME(TIME_START_TR) < '14:00:00'
:筛选条件,使用TIME()
函数从TIME_START_TR
字段中提取时间部分,并与'14:00:00'
进行比较,只选取时间早于下午 2 点的记录。AND COD_TR_BOEC_CLI = 61606
:进一步筛选条件,确保选取的记录中COD_TR_BOEC_CLI
(操作代码)等于61606
。
收起
sql
-- 主查询找出没有在下午 2 点前进行 61606 操作的机构和用户
SELECT ao.COD_BRCH_OU_TR, ao.ID_INTL_USER_TR
FROM all_org_user ao
LEFT JOIN operated_org_user oo ON ao.COD_BRCH_OU_TR = oo.COD_BRCH_OU_TR AND ao.ID_INTL_USER_TR = oo.ID_INTL_USER_TR
WHERE oo.COD_BRCH_OU_TR IS NULL;
SELECT ao.COD_BRCH_OU_TR, ao.ID_INTL_USER_TR
:主查询选择all_org_user
表(使用别名ao
)中的COD_BRCH_OU_TR
和ID_INTL_USER_TR
列。FROM all_org_user ao
:指定主查询的数据来源为all_org_user
表,并使用别名ao
方便后续引用。LEFT JOIN operated_org_user oo ON ao.COD_BRCH_OU_TR = oo.COD_BRCH_OU_TR AND ao.ID_INTL_USER_TR = oo.ID_INTL_USER_TR
:使用左连接(LEFT JOIN
)将all_org_user
表和operated_org_user
表(使用别名oo
)连接起来。连接条件是两个表中的COD_BRCH_OU_TR
和ID_INTL_USER_TR
列的值都相等。左连接会返回all_org_user
表中的所有行,即使在operated_org_user
表中没有匹配的行。WHERE oo.COD_BRCH_OU_TR IS NULL
:最终筛选条件,只选取在operated_org_user
表中没有匹配记录的行,也就是那些在下午 2 点之前没有进行61606
操作的机构和用户组合。
综上所述,整个查询通过两个子查询分别获取所有机构 - 用户组合和下午 2 点前进行 61606
操作的机构 - 用户组合,然后通过左连接和筛选条件找出未在下午 2 点前进行该操作的机构和用户。
%load_ext sql
# 定义要查询的年份
target_year = 2023
# 定义 SQL 查询语句,将 CTE 转换为子查询
sql_query = f"""
SELECT ao.COD_BRCH_OU_TR, ao.ID_INTL_USER_TR
FROM (
SELECT DISTINCT COD_BRCH_OU_TR, ID_INTL_USER_TR
FROM P_34TPUP_UCAP_TERM_JRN_INFOA
WHERE SUBSTR(DATE_REQ, 1, 4) = '{target_year}'
) ao
LEFT JOIN (
SELECT DISTINCT COD_BRCH_OU_TR, ID_INTL_USER_TR
FROM P_34TPUP_UCAP_TERM_JRN_INFOA
WHERE SUBSTR(TIME_START_TR, 12, 8) < '14:00:00'
AND COD_TR_BOEC_CLI = 61606
AND SUBSTR(DATE_REQ, 1, 4) = '{target_year}'
) oo ON ao.COD_BRCH_OU_TR = oo.COD_BRCH_OU_TR AND ao.ID_INTL_USER_TR = oo.ID_INTL_USER_TR
WHERE oo.COD_BRCH_OU_TR IS NULL;
"""
# 执行查询
result = %sql $sql_query
import os
import pandas as pd
try:
# 将查询结果转换为 pandas DataFrame
df = result.DataFrame()
# 显示 DataFrame
if not df.empty:
print("未在下午 2 点前进行 61606 操作的机构和用户如下:")
display(df)
# 打印 ID_INTL_USER_TR 列的值
print("ID_INTL_USER_TR 列的值如下:")
print(df['ID_INTL_USER_TR'].to_csv(sep='\n', na_rep='nan'))
# 明确指定保存路径
save_path = '/home/mole/work/zyy/output1.xlsx'
# 创建保存目录(如果不存在)
save_dir = os.path.dirname(save_path)
if not os.path.exists(save_dir):
os.makedirs(save_dir)
print(f"开始导出数据到 {save_path}...")
df.to_excel(save_path, index=False)
print(f"数据已成功导出到 {save_path} 文件。")
else:
print("所有机构和用户都在下午 2 点前进行了 61606 操作,没有数据可导出。")
except AttributeError:
print("查询结果不是预期的对象类型,请检查数据库连接和查询语句。")
except Exception as e:
print(f"导出文件时出现错误:{e}")
%load_ext sql
# 定义日期范围
start_date = '20230101'
end_date = '20231231'
# 定义 SQL 查询语句,将 CTE 转换为子查询
sql_query = f"""
SELECT ao.COD_BRCH_OU_TR, ao.ID_INTL_USER_TR
FROM (
SELECT DISTINCT COD_BRCH_OU_TR, ID_INTL_USER_TR
FROM P_34TPUP_UCAP_TERM_JRN_INFOA
WHERE DATE_REQ BETWEEN '{start_date}' AND '{end_date}'
) ao
LEFT JOIN (
SELECT DISTINCT COD_BRCH_OU_TR, ID_INTL_USER_TR
FROM P_34TPUP_UCAP_TERM_JRN_INFOA
WHERE SUBSTR(TIME_START_TR, 12, 8) < '14:00:00'
AND COD_TR_BOEC_CLI = 61606
AND DATE_REQ BETWEEN '{start_date}' AND '{end_date}'
) oo ON ao.COD_BRCH_OU_TR = oo.COD_BRCH_OU_TR AND ao.ID_INTL_USER_TR = oo.ID_INTL_USER_TR
WHERE oo.COD_BRCH_OU_TR IS NULL;
"""
# 执行查询
result = %sql $sql_query
import os
import pandas as pd
try:
# 将查询结果转换为 pandas DataFrame
df = result.DataFrame()
# 显示 DataFrame
if not df.empty:
print("未在下午 2 点前进行 61606 操作的机构和用户如下:")
display(df)
# 打印 ID_INTL_USER_TR 列的值
print("ID_INTL_USER_TR 列的值如下:")
print(df['ID_INTL_USER_TR'].to_csv(sep='\n', na_rep='nan'))
# 明确指定保存路径
save_path = '/home/mole/work/zyy/output1.xlsx'
# 创建保存目录(如果不存在)
save_dir = os.path.dirname(save_path)
if not os.path.exists(save_dir):
os.makedirs(save_dir)
print(f"开始导出数据到 {save_path}...")
df.to_excel(save_path, index=False)
print(f"数据已成功导出到 {save_path} 文件。")
else:
print("所有机构和用户都在下午 2 点前进行了 61606 操作,没有数据可导出。")
except AttributeError:
print("查询结果不是预期的对象类型,请检查数据库连接和查询语句。")
except Exception as e:
print(f"导出文件时出现错误:{e}")
%load_ext sql
# 定义日期范围
start_date = '20230101'
end_date = '20231231'
# 定义机构编号条件
target_org_code = '341390'
# 定义 SQL 查询语句,将 CTE 转换为子查询
sql_query = f"""
SELECT ao.COD_BRCH_OU_TR, ao.ID_INTL_USER_TR
FROM (
SELECT DISTINCT COD_BRCH_OU_TR, ID_INTL_USER_TR
FROM P_34TPUP_UCAP_TERM_JRN_INFOA
WHERE DATE_REQ BETWEEN '{start_date}' AND '{end_date}'
AND COD_BRCH_OU_TR = '{target_org_code}'
) ao
LEFT JOIN (
SELECT DISTINCT COD_BRCH_OU_TR, ID_INTL_USER_TR
FROM P_34TPUP_UCAP_TERM_JRN_INFOA
WHERE SUBSTR(TIME_START_TR, 12, 8) < '14:00:00'
AND COD_TR_BOEC_CLI = 61606
AND DATE_REQ BETWEEN '{start_date}' AND '{end_date}'
AND COD_BRCH_OU_TR = '{target_org_code}'
) oo ON ao.COD_BRCH_OU_TR = oo.COD_BRCH_OU_TR AND ao.ID_INTL_USER_TR = oo.ID_INTL_USER_TR
WHERE oo.COD_BRCH_OU_TR IS NULL;
"""
# 执行查询
result = %sql $sql_query
import os
import pandas as pd
try:
# 将查询结果转换为 pandas DataFrame
df = result.DataFrame()
# 显示 DataFrame
if not df.empty:
print("未在下午 2 点前进行 61606 操作的机构和用户如下:")
display(df)
# 打印 ID_INTL_USER_TR 列的值
print("ID_INTL_USER_TR 列的值如下:")
print(df['ID_INTL_USER_TR'].to_csv(sep='\n', na_rep='nan'))
# 明确指定保存路径
save_path = '/home/mole/work/zyy/output1.xlsx'
# 创建保存目录(如果不存在)
save_dir = os.path.dirname(save_path)
if not os.path.exists(save_dir):
os.makedirs(save_dir)
print(f"开始导出数据到 {save_path}...")
df.to_excel(save_path, index=False)
print(f"数据已成功导出到 {save_path} 文件。")
else:
print("所有机构和用户都在下午 2 点前进行了 61606 操作,没有数据可导出。")
except AttributeError:
print("查询结果不是预期的对象类型,请检查数据库连接和查询语句。")
except Exception as e:
print(f"导出文件时出现错误:{e}")
我喜欢的展示:能把一行的完整信息都展示 然后在给出柜员号 但是不是列表格式的不好看
%load_ext sql
# 定义 SQL 查询语句
sql_query = """
-- 子查询获取所有机构和用户的组合
WITH all_org_user AS (
SELECT DISTINCT COD_BRCH_OU_TR, ID_INTL_USER_TR
FROM P_34TPUP_UCAP_TERM_JRN_INFOA
),
-- 子查询获取下午 2 点前进行 61606 操作的机构和用户组合
operated_org_user AS (
SELECT DISTINCT COD_BRCH_OU_TR, ID_INTL_USER_TR
FROM P_34TPUP_UCAP_TERM_JRN_INFOA
WHERE SUBSTR(TIME_START_TR, 12, 8) < '14:00:00'
AND COD_TR_BOEC_CLI = 61606
)
-- 主查询找出没有在下午 2 点前进行 61606 操作的机构和用户
SELECT ao.COD_BRCH_OU_TR, ao.ID_INTL_USER_TR
FROM all_org_user ao
LEFT JOIN operated_org_user oo ON ao.COD_BRCH_OU_TR = oo.COD_BRCH_OU_TR AND ao.ID_INTL_USER_TR = oo.ID_INTL_USER_TR
WHERE oo.COD_BRCH_OU_TR IS NULL;
"""
# 执行查询
result = %sql $query
# # 处理查询结果
# if result:
# print("查询到的数据如下:")
# for row in result:
# print(row)
# else:
# print("未查询到数据。")
import os
import pandas as pd
# ... 前面查询数据的代码保持不变 ...
try:
# 将查询结果转换为 pandas DataFrame
df = result.DataFrame()
# 显示 DataFrame
if not df.empty:
print("未在下午 2 点前进行 61606 操作的机构和用户如下:")
display(df)
# 打印 ID_INTL_USER_TR 列的值
print("ID_INTL_USER_TR 列的值如下:")
print(df['ID_INTL_USER_TR'].to_csv(sep='\n', na_rep='nan'))
# 明确指定保存路径
save_path = '/home/mole/work/zyy/output1.xlsx'
# 创建保存目录(如果不存在)
save_dir = os.path.dirname(save_path)
if not os.path.exists(save_dir):
os.makedirs(save_dir)
print(f"开始导出数据到 {save_path}...")
df.to_excel(save_path, index=False)
print(f"数据已成功导出到 {save_path} 文件。")
else:
print("所有机构和用户都在下午 2 点前进行了 61606 操作,没有数据可导出。")
except AttributeError:
print("查询结果不是预期的对象类型,请检查数据库连接和查询语句。")
except Exception as e:
print(f"导出文件时出现错误:{e}")