在多个列上选择不重复和最大

时间:2019-05-31 13:09:57

标签: sql oracle aggregate-functions greatest-n-per-group

我在查询上工作了几个小时,在创建查询时会遇到一些麻烦,该查询从2个表中返回一些过滤后的值。

    Table A [QUOTATION] :

    quotation_code STRING,
    customer_id STRING,
    offer_id STRING

    Table B [OFFER] :

    offer_id STRING,
    offer_date TIMESTAMP

一个客户可以有多个报价,每个报价可以有多个报价。报价也可以有多个客户(我认为这无关紧要)

我需要编写一个查询,该查询为每个客户返回链接到他的最后一个报价。例如(使用内部联接和日期格式MM / DD / YYYY进行选择):

    | quotation_code | customer_id | offer_id | offer_date |
    | 1              | 1           | 2        | 01/01/2019 |
    | 1              | 1           | 2        | 01/02/2019 |
    | 1              | 1           | 1        | 01/10/2019 |
    | 2              | 2           | 3        | 12/12/2018 |
    | 2              | 2           | 6        | 01/01/2019 |
    | 1              | 3           | 4        | 03/15/2019 |
    | 4              | 2           | 2        | 03/02/2019 |

预期结果是:

    | quotation_code | customer_id | offer_date |
    | 1              | 1           | 01/10/2019 |
    | 4              | 2           | 03/02/2019 |
    | 1              | 3           | 03/15/2019 |

我编写了此查询,以为每个客户的每个quotation_code返回每个max(offer_date)

    SELECT
        Q.customer_id AS custo_id,
        MAX(CAST(OFR.offr_date as date)) as offer_date,
        Q.quotation_code
    FROM QUOTATION Q
    INNER JOIN OFFER OFR ON Q.OFFER_ID = OFR.OFFER_ID
    group by q.quotation_code, q.customer_id);

如果有解决方案,您将拯救我的一天:D

0 个答案:

没有答案