Ubuntu里 jupyter

存储的文件在哪里?(下面代码 查询不对 保存好用)

%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}")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值