簡體   English   中英

如何在給定條件 SQL 的情況下在分區中查找第 N 行?

[英]How to Find Nth Row in Partition Given a Condition SQL?

您好,我有以下表格:

品牌欄:Brand_ID(主鍵)、公司名稱

訂單列:ORDER_ID(Primary Key), USER_ID, BRAND_ID(Foreign Key), DATE

如果訂單來自 COMPANY_NAME X,我正在嘗試為每個 USER_ID 獲取 2018 年之后下的第 3 個訂單。我對如何進行有點迷茫。 我試過使用窗口函數,但我認為它不允許我在內部使用 WHERE 函數?

我有以下代碼:

SELECT *
FROM (
    SELECT O.*,
        row_number() OVER (
            PARTITION BY USER_ID 
            WHERE DATE >= '2018/01/01'
            ORDER BY DATE
            ) as rank
    FROM Orders O
    ) O
JOIN Brands B ON O.BRAND_ID = B.BRAND_ID
WHERE O.rank = 3 AND B.COMPANY_NAME = 'X';

您想在where子句中進行過濾——這不是窗口函數規范的一部分:

SELECT *
FROM (SELECT O.*,
             row_number() OVER (PARTITION BY USER_ID 
                                ORDER BY DATE
                               ) as rank
      FROM Orders O
      WHERE DATE >= '2018-01-01'
     ) O JOIN
     Brands B
     ON O.BRAND_ID = B.BRAND_ID
WHERE O.rank = 3 AND B.COMPANY_NAME = 'X';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM