8000 Duplicate CTE generated when multiple window functions are involved · Issue #105 · dimagi/django-cte · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
Duplicate CTE generated when multiple window functions are involved #105
Open
@salomvary

Description

@salomvary

Given this CTE query:

  cte = With(Thing.objects
             .annotate(row_number=Window(RowNumber())))

  queryset = (
      cte.queryset().with_cte(cte)
      .annotate(row_number2=Window(RowNumber(), order_by=[F("row_number")]))
      .filter(row_number2=1)
  )

The generated SQL looks like this:

WITH RECURSIVE cte AS (
    SELECT my_app_thing.id, 
           ROW_NUMBER() OVER () AS row_number 
    FROM my_app_thing
)
SELECT *
FROM (
    WITH RECURSIVE cte AS (
        SELECT my_app_thing.id, 
               ROW_NUMBER() OVER () AS row_number 
        FROM my_app_thing
    )
    SELECT cte.id AS col1, 
           cte.row_number AS row_number, 
           ROW_NUMBER() OVER (ORDER BY cte.row_number) AS row_number2
      FROM cte
  ) qualify
WHERE row_number2 = 1

While it should be something like this:

WITH RECURSIVE cte AS (
    SELECT my_app_thing.id, 
           ROW_NUMBER() OVER () AS row_number 
    FROM my_app_thing
)
SELECT *
FROM (
    SELECT cte.id AS col1, 
                 cte.row_number AS row_number, 
                 ROW_NUMBER() OVER (ORDER BY cte.row_number) AS row_number2
    FROM cte
) qualify
WHERE row_number2 = 1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0