Python 将SQL转换为Django ORM查询(“如果”语句位于“窗口”内、“引导”函数内)

Python 将SQL转换为Django ORM查询(“如果”语句位于“窗口”内、“引导”函数内),python,sql,django,Python,Sql,Django,我正在尝试获取下一个开始使用服务的客户的日期,并将该日期附加到前一个客户 我试图了解F()和Q()以及类似SQL的函数在Django中的工作方式,但无法了解如何将以下SQL语句转换为有效的Django代码: SELECT *, LEAD( IF(actual_start IS NOT NULL, actual_start, planned_start) , 1)

我正在尝试获取下一个开始使用服务的客户的日期,并将该日期附加到前一个客户

我试图了解F()和Q()以及类似SQL的函数在Django中的工作方式,但无法了解如何将以下SQL语句转换为有效的Django代码:

            SELECT
            *,
            LEAD(
                IF(actual_start IS NOT NULL, actual_start, planned_start)
                , 1)
                OVER(
                    PARTITION BY customer
                    ORDER BY actual_start, planned_start
                ) AS next_starting_time
            FROM builds_build;
我试着把我看到的东西混在一起:

    window = {
        "partition_by": [F('customer')],
        'order_by': [F('actual_start'),F('planned_start')]
    }
    records = Record.objects.annotate(
        next_customer = Window(
            expression = Lead(F('actual_start') if F('actual_start') else F('planned_start'),
             **window)
        )
    )
但是,在查询中,没有考虑前置表达式的条件部分(这就是Django生成的SQL的样子):


但是,它完全删除了预期的“如果”语句。如果您有任何建议和想法,我们将不胜感激

在Lead中设置默认值您也可以使用或@iklinac,无论出于何种原因,我甚至没有想到COALESCE。。。看起来效果不错-谢谢!!!在Lead中设置默认值,您也可以使用或@iklinac,无论出于何种原因,我甚至没有考虑COALESCE。。。看起来效果不错-谢谢!!!
            SELECT
            *,
            LEAD(actual_start, 1)
                OVER(
                    PARTITION BY customer
                    ORDER BY actual_start, planned_start
                ) AS next_starting_time
            FROM builds_build;