Latest price paid per supplier per product

  • Hi,
    I'm struggling with the SQL to show the latest price we've paid a supplier per product. The product can be supplied by different suppliers and a supplier can provide us different products.
    It's just one table and looks similar to this:

    ITMREF_0 IPTDAT_0BPRNUM_0Price
    102/10/2016110
    103/10/2014115
    104/10/2016220
    205/10/2016310
    206/10/2016415
    207/10/2015120

    So based upon the above I'd like the SQL to show:

    ITMREF_0LatestDateBPRNUM_0Price
    102/10/2016110
    104/10/2016220
    205/10/2016310
    206/10/2016415
    207/10/2015120

    Does anyone have any ideas please?
    Thank you,

  • CREATE TABLE #Supply
      (ITMREF_0 int,
      IPTDAT_0 date,
      BPRNUM_0 int,
      Price int);
    GO

    INSERT INTO #Supply
    VALUES
      (1, '20161002', 1, 10),
      (1, '20141003', 1, 15),
      (1, '20161004', 2, 20),
      (2, '20161005', 3, 10),
      (2, '20161006', 4, 15),
      (2, '20161007', 1, 20);

    GO

    SELECT *
    FROM #Supply;
    GO

    WITH CTE AS(
      SELECT *,
            ROW_NUMBER() OVER (PARTITION BY ITMREF_0, BPRNUM_0 ORDER BY IPTDAT_0 DESC) AS RN
      FROM #Supply)
    SELECT ITMREF_0,
           IPTDAT_0 AS LatestDate,
           BPRNUM_0,
           Price
    FROM CTE
    WHERE RN = 1
    ORDER BY IPTDAT_0 ASC;

    GO

    DROP TABLE #Supply
    GO

    Thom~

    Excuse my typos and sometimes awful grammar. My fingers work faster than my brain does.
    Larnu.uk

  • Thom A - Wednesday, April 12, 2017 7:38 AM

    CREATE TABLE #Supply
      (ITMREF_0 int,
      IPTDAT_0 date,
      BPRNUM_0 int,
      Price int);
    GO

    INSERT INTO #Supply
    VALUES
      (1, '20161002', 1, 10),
      (1, '20141003', 1, 15),
      (1, '20161004', 2, 20),
      (2, '20161005', 3, 10),
      (2, '20161006', 4, 15),
      (2, '20161007', 1, 20);

    GO

    SELECT *
    FROM #Supply;
    GO

    WITH CTE AS(
      SELECT *,
            ROW_NUMBER() OVER (PARTITION BY ITMREF_0, BPRNUM_0 ORDER BY IPTDAT_0 DESC) AS RN
      FROM #Supply)
    SELECT ITMREF_0,
           IPTDAT_0 AS LatestDate,
           BPRNUM_0,
           Price
    FROM CTE
    WHERE RN = 1
    ORDER BY IPTDAT_0 ASC;

    GO

    DROP TABLE #Supply
    GO

    Perfect, thank you very much 🙂

Viewing 3 posts - 1 through 3 (of 3 total)

You must be logged in to reply to this topic. Login to reply