SQL - выберите результаты для MAX (дата) для нескольких столбцов в одной строке - PullRequest
0 голосов
/ 23 ноября 2018

Я хотел бы получить дату последнего заказа из таблицы, разделенной на продажи, как заказ на покупку.

. См. Пример ниже

ПРИМЕР

PRODUCT     ORDER_DATE  ORDER_PRICE ORDER_TYPE
0000016920  2018-05-11  135.440     Purchase Order
0000016920  2018-05-11  135.440     Sales Order
0000022670  2018-08-01  0.010       Sales Order
0000024280  2018-09-25  661.9757    Purchase Order
0000024280  2018-09-25  661.9757    Sales Order
0000025560  2018-03-14  265.5953    Sales Order
0000025560  2018-01-16  224.6733    Sales Order
0000025560  2018-03-14  265.5953    Purchase Order
0000025560  2018-03-01  224.6733    Sales Order
0000025560  2018-01-16  224.6733    Purchase Order
0000025590  2018-10-02  841.3115    Sales Order
0000025590  2018-10-02  841.3115    Purchase Order
0000025960  2018-10-02  1070.6024   Purchase Order
0000025960  2018-10-02  1070.6024   Purchase Order
0000025960  2018-10-02  1013.0212   Purchase Order
0000025960  2018-01-11  747.2314    Purchase Order

желаемый выход

PRODUCT     SALESDATE       SALES_PRICE         PURCHASE_DATE       PPRICE
0000016920  2018-05-11      135.4400            2018-05-11          135.4400            
0000022670  2018-08-01      0.0100              2018-08-01          0.0100              
0000024280  2018-09-25      661.9757            2018-09-25          661.9757            
0000025560  2018-03-14      265.5953            2018-03-14          265.5953            
0000025560  2018-01-16      224.6733            2018-01-16          224.6733            
0000025560  2018-03-01      224.6733            2018-03-01          224.6733            
0000025590  2018-10-02      841.3115            2018-10-02          841.3115            
0000025960  2018-03-01      747.2314            2018-03-01          747.2314            
0000025960  2018-10-02      1056.2071           2018-10-02          1056.2071           
0000025960  2018-10-02      1070.6024           2018-10-02          1070.6024           
0000025960  2018-01-12      747.2314            2018-01-12          747.2314

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

Полагаю, вам нужно что-то подобное:

SELECT   ISNULL(Sales.PRODUCT,Purchase.PRODUCT) AS Product
        ,ISNULL(Sales.ORDER_DATE ,Purchase.ORDER_DATE ) AS OrderDate
        ,Sales.ORDER_PRICE AS SalesPrice
        ,Purchase.ORDER_PRICE AS PurchasePrice
FROM 
(SELECT * FROM Tbl AS T WHERE ORDER_TYPE='Sales Order') AS Sales
FULL OUTER JOIN (SELECT * FROM Tbl AS T WHERE ORDER_TYPE='Purchase Order') AS Purchase ON Sales.PRODUCT=Purchase.PRODUCT AND Sales.ORDER_DATE=Purcahse.ORDER_DATE
0 голосов
/ 23 ноября 2018

Я бы просто использовал условную агрегацию:

select product,
       max(case when order_type = 'Sales Order' then order_date end) as sales_date,
       max(case when order_type = 'Sales Order' then order_price end) as sales_price,
       max(case when order_type = 'Purchase Order' then order_date end) as purchase_date,
       max(case when order_type = 'Purchase Order' then order_price end) as purchase_price
from example
group by product;
0 голосов
/ 23 ноября 2018

Вы можете использовать что-то вроде этого

SELECT (SELECT MAX(DATE1) from tbl) as date1, (SELECT MAX(DATE2) from tbl) as date2
...