繁体   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