私は、それぞれ独自の行にある製品の車両適合情報の大きなデータセットを持っています。 重複している各エントリの最小年と最大年だけを選択するクエリを作成するのに苦労しています。 は例えば、私は、次のようなデータを持っている:私はデータを保持して心配していないです車両適合データが重複して重複している年
fromyear toyear makename modelname submodelname wheelbase BedLength BedTypeName bodytype note1 Note2 note3 partterminologyname exppartno
2008 2012 Chevrolet Silverado 1500 LT NULL 78.00 Fleetside NULL Black NULL NULL Truck Bed Mat 37807
2010 2010 Chevrolet Silverado 1500 LT NULL 78.00 Fleetside NULL Black NULL NULL Truck Bed Mat 37807
2014 2017 Chevrolet Silverado 1500 LT NULL 78.00 Fleetside NULL Black NULL NULL Truck Bed Mat 37807
をので、私は最小と最大の年の選択が、
のようなものを追加することによって、UPDATEクエリに私のフォーカスを移動しました(SELECT MIN(p2.fromyear)
FROM prod AS p2
WHERE p1.fromyear > 0
AND p2.toyear >= p1.fromyear
AND p2.fromyear < p1.fromyear
AND ISNULL(p2.makename, '') = ISNULL(p1.makename, '')
AND ISNULL(p2.modelname, '') = ISNULL(p1.modelname, '')
AND ISNULL(p2.submodelname, '') = ISNULL(p1.submodelname, '')
AND ISNULL(FLOOR(p2.wheelbase), 0) = ISNULL(FLOOR(p1.wheelbase), 0)
AND ISNULL(FLOOR(p2.BedLength), 0) = ISNULL(FLOOR(p1.BedLength), 0)
AND ISNULL(p2.BedTypeName, '') = ISNULL(p1.BedTypeName, '')
AND ISNULL(p2.bodytype, '') = ISNULL(p1.bodytype, '')
AND ISNULL(p2.note1, '') = ISNULL(p1.note1, '')
AND ISNULL(p2.Note2, '') = ISNULL(p1.Note2, '')
AND ISNULL(p2.note3, '') = ISNULL(p1.note3, '')
AND ISNULL(p2.exppartno, '') = ISNULL(p1.exppartno, '')) AS newfrom
は、クエリが過剰な時間(150,000行以上のテーブルから取り出される)で実行されるようにします。 年をマージするためにUPDATEを実行した後、重複する行を削除するだけで済みます。
所望の結果は、このモデルのために2行のみを返します、2008年から2012年と2014年から2017年には
私のオリジナルのアイデアは、単にMIN(fromyear)とMAX(toyear)を選択するには、しかし、これは私を残しました。 2013年の無効年をオプションとして持つ問題。
このような重複年を処理するためのクエリを作成する簡単な方法はありますか?検索で見つかったものは、複数の列のデータを照合する必要はありませんでした。
更新後にテーブルがどのように見えるかを表示することができれば非常に役に立ちます(?を選択してください)。ここで実際に何をしたいのかははっきりしていません。 –