python - 需要在按不匹配日期分组的 2 个索引上转置一些 SQL 值(SQL 和 Python)

标签 python sql pivot

我包含了一张图片,显示了我在 SQL 中尝试执行的操作。您在左侧看到的表是我在服务器上运行 SQL 查询得到的结果。我正在尝试使用 SQL/Python 创建右侧的表。我会使用主元,但当主元聚合值时,我必须取组件编号列的平均值、总和、最小值、最大值或其他值。实际上,我需要 2 个索引转置。可以对每个序列号进行多次测试。我需要使第一个测试按日期显示在第一个测试值列中,第二个、第三个或第四个测试也是如此。我需要每个序列号和每个组件的值显示在“测试 1”、“测试 2”、“测试 3”中。棘手的部分是,每个部件的测试 1、测试 2 和测试 3 都不同,但它们仍然需要按每个序列号的连续测试日期分组到存储桶中。

如果有人可以帮助我使用一些方法或帮助我为我想做的事情生成一些伪代码,我将不胜感激。谢谢。

以下是表格图像的链接: 左边是我的 SQL 查询提取的内容,右边是我想要的结果。

enter image description here

最佳答案

您可以使用row_number()和条件聚合:

select 
    serial_number,
    component_number
    max(case when rn = 1 then test_value end) test1,
    max(case when rn = 2 then test_value end) test2
from (
    select
        t.*,
        row_number() over(partition by serial_number, component_number order by test_date) rn
    from mytable t
) t
group by serial_number, component_number

在子查询中,row_number() 为共享相同 serial_numbercomponent_number 的组内的每个记录分配排名。然后,外部查询按 serial_numbercomponent_number 进行聚合,并根据其排名将 test_value 分散到各个列中。您可以使用更多条件 max() 扩展外部查询的 select 子句,以处理每个 (serial_number, component_number) 两个以上的测试元组。

关于python - 需要在按不匹配日期分组的 2 个索引上转置一些 SQL 值(SQL 和 Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59976913/

相关文章:

sql-server-2008 - 动态枢轴中的行和列总计

python - 调度程序关闭流警告

python - 在 Django 1.6 中提供图像

python - 如何使用python计算数据透视表

mysql - 错误 1129 : Host '' blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

MySQL 函数/循环

python - 如何 reshape 数据框(列中的不同类型)

python - 赋值之前引用的局部变量 'price_end'

python - Flask SQLAlchemy - 2013 失去连接

MySQL 拒绝多个用户访问