2016-09-21 22 views
1

テーブル内の各SKUのBarCodeを一覧表示しようとしていますが、場合によってはBarCodeが異なるため、1つのSKUから1つのバーコードを取得したい返されるバーコードは、最新のUpdateDateを持つものでなければなりません。複合主キーのテーブルでMAX(DATE)を持つGROUP BY

例:

StoreID  SKU BarCode   UpdateDate 
------------------------------------------------------------- 
1   95810 28471000000  10/06/2016 04:20:00 a.m. 
1   95810 30040050033  01/03/2012 01:00:00 a.m. 
2   44320 65453102001  15/05/2010 01:00:00 a.m. 
2   44320 12343102001  01/01/2015 01:00:00 a.m. 

望ましい結果があるべき:

StoreID  SKU BarCode   UpdateDate 
------------------------------------------------------------- 
1   95810 28471000000  10/06/2016 04:20:00 a.m. 
2   44320 12343102001  01/01/2015 01:00:00 a.m. 

Iは

SELECT 
    t.SKU, r.MaxTime 
FROM 
    (SELECT 
     P.SKU, MAX(P.Fec_Movto) as MaxTime 
    FROM 
     Productos as P 
    GROUP BY 
     P.SKU) r 
INNER JOIN 
    Productos t ON t.SKU = r.SKU AND t.Fec_Movto = r.MaxTime 

使用しようとしているが、ここでの問題は、主キーが複合主キーであることですそれはまったく動作しません。

答えて

3

はまあ

SELECT p.StoreId, p.SKU, p.Barcode, p.UpdateDate FROM AProductos p 
JOIN( SELECT StoreId, SKU, MAX(UpdateDate) as MaxTime 
FROM AProductos 
GROUP BY StoreId, SKU 
) r ON p.StoreId = r.StoreId 
AND p.SKU  = r.SKU 
AND p.UpdateDate = r.MaxTime; 
0

のように使用ROW_NUMBERであってもよいし、明白な答えではないのですか? SKUはキーの一部分なので、他の部分なしでSKUを使用しないでください。StoreID

SELECT p.StoreId, p.SKU, p.Barcode, p.Fec_Movto 
FROM Productos p 
JOIN 
(
    SELECT StoreId, SKU, MAX(Fec_Movto) as MaxTime 
    FROM Productos 
    GROUP BY StoreId, SKU 
) r ON p.StoreId = r.StoreId 
    AND p.SKU  = r.SKU 
    AND p.Fec_Movto = r.MaxTime; 

代替は、あなたが二回表にアクセスする必要はありませんので、行をランク付けするために、次のようになります。

SELECT StoreId, SKU, Barcode, Fec_Movto 
FROM 
(
    SELECT 
    SKU, 
    Fec_Movto, 
    ROW_NUMBER() OVER (PARTITION BY StoreId, SKU ORDER BY Fec_Movto DESC) AS rn 
    FROM Productos 
) ranked 
WHERE rn = 1; 
0

、これを試してみてください

select * from 
(select StoreID,SKU,BarCode,UpdateDate 
,row_number() over (partition by SKU order by UpdateDate desc) rowid 
from Productos) t 
where rowid = 1 
0

[適用OUTERを使用することができます。

SELECT distinct main.StoreId, main.SKU, b.Barcode, b.UpdateDate 
FROM Productos as main 
Outer Apply (Select Top 1 
        SKU, BarCode, UpdateDate 
      from Productos as sub 
      where main.SKU = sub.SKU 
      Order by sub.UpdateDate desc 
      ) b 
関連する問題