(質問はこれと似ていますが、私のものは1-SQL ServerではなくAccessで、2-1列の変更のみをチェックする点が異なります。)
製品(SKU)、購入日、購入時の価格のサンプルデータは次のとおりです。
+----------------+------------+------------+
| SKU | Unit_Price | Date_Due |
+----------------+------------+------------+
| BHM1200NBACSTA | $13.00 | 11/2/2012 |
| BHM1200NBACSTA | $13.00 | 10/19/2012 |
| BHM1200NBACSTA | $13.00 | 9/28/2012 |
| BHM1200NBACSTA | $10.50 | 9/21/2012 |
| BHM1200NBACSTA | $13.00 | 8/27/2012 |
| BHM1200NBACSTA | $13.00 | 7/4/2012 |
| BHM1200NBACSTA | $12.50 | 6/19/2012 |
| BHM1700NDACSTA | $14.50 | 10/27/2012 |
| BHM1700NDACSTA | $14.73 | 9/29/2012 |
| BHM1700NDACSTA | $14.73 | 8/23/2012 |
| BHM1700NDACSTA | $14.50 | 6/20/2012 |
+----------------+------------+------------+
特定の日付範囲に対して1つの価格のみを表示したいので、特定の製品が同じ価格で複数回購入された場合、その価格のその製品の最初の日付のみを表示したい:
サンプル出力は次のようになります。
+----------------+------------+------------+
| SKU | Unit_Price | Date_Due |
+----------------+------------+------------+
| BHM1200NBACSTA | $13.00 | 9/28/2012 |
| BHM1200NBACSTA | $10.50 | 9/21/2012 |
| BHM1200NBACSTA | $13.00 | 7/4/2012 |
| BHM1200NBACSTA | $12.50 | 6/19/2012 |
| BHM1700NDACSTA | $14.50 | 10/27/2012 |
| BHM1700NDACSTA | $14.73 | 8/23/2012 |
| BHM1700NDACSTA | $14.50 | 6/20/2012 |
+----------------+------------+------------+
(価格は上下、そして上昇する可能性があることに注意してください。製品ごとに一意の価格セットが必要なだけでなく、連続する日付範囲ごとに一意のセットが必要です。)
これまで、私は以下を使用しました:
SELECT hbp1.SKU, hbp1.Date_Due, hbp1.Unit_Price
FROM Historical_Buy_Prices AS hbp1
Left JOIN Historical_Buy_Prices AS hpb2
ON (hbp1.SKU = hpb2.SKU)
AND (hbp1.Date_Due + 1 = hpb2.Date_Due)
WHERE (hpb2.Date_Due IS NULL
OR hbp1.Unit_Price <> hbp2.Unit_Price)
ORDER BY hbp1.SKU, hbp1.Date_Due;
実行すると、結果を表示する前に、Accessからhbp2.Unit_Priceの値の入力を求められますが、それでも重複が返されます。
私が見逃したのは単純なことだと確信しています。手伝ってもらえますか?ありがとう、
更新:ddlを使用してテーブルを作成するには、次を使用します。
CREATE TABLE Historical_Buy_Prices (SKU Text, UNIT_PRICE Currency, DATE_DUE Date
);
サンプルデータを挿入するには、次を使用します。
INSERT INTO Historical_Buy_Prices VALUES ("BHM1200NBACSTA", 13.00, #11/2/2012#);
INSERT INTO Historical_Buy_Prices VALUES ("BHM1200NBACSTA", 13.00, #10/19/2012#);
INSERT INTO Historical_Buy_Prices VALUES ("BHM1200NBACSTA", 13.00, #9/28/2012#);
INSERT INTO Historical_Buy_Prices VALUES ("BHM1200NBACSTA", 10.50, #9/21/2012#);
INSERT INTO Historical_Buy_Prices VALUES ("BHM1200NBACSTA", 13.00, #8/27/2012#);
INSERT INTO Historical_Buy_Prices VALUES ("BHM1200NBACSTA", 13.00, #7/4/2012#);
INSERT INTO Historical_Buy_Prices VALUES ("BHM1200NBACSTA", 12.50, #6/19/2012#);
INSERT INTO Historical_Buy_Prices VALUES ("BHM1700NDACSTA", 14.50, #10/27/2012#);
INSERT INTO Historical_Buy_Prices VALUES ("BHM1700NDACSTA", 14.73, #9/29/2012#);
INSERT INTO Historical_Buy_Prices VALUES ("BHM1700NDACSTA", 14.73, #8/23/2012#);
INSERT INTO Historical_Buy_Prices VALUES ("BHM1700NDACSTA", 14.50, #6/20/2012#);