私は、下の列とサンプルデータを持つOracleテーブルdm_djr_bulkjobを持っています。私は、クエリの下に使用して一時テーブルにデータを挿入するクエリを実行していますOracleテーブルにデータを挿入中に重複行を検索
+----------+------+-----------+------------------+------+----------------------+
| device_id| cg_id|firmware_id| best_status |dmc_id|oltp_updated |
+----------+------+-----------+------------------+------+----------------------+
| 2009160 | 000 |25822 |No Device Response|1736 |27-JUL-17 10:00:00 AM |
| 2009160 | 000 |25822 |401 |1736 |27-JUL-17 14:00:00 PM |
| 2009157 | 000 |25745 |Wifi Deferred |1736 |27-JUL-17 02:00:00 AM |
| 2009174 | 000 |25861 |Low Memory |1736 |27-JUL-17 08:00:00 AM |
+----------+------+-----------+------------------+------+----------------------+
:
insert into DM_ETLTEMP_BULK_BSTRESULT_SUMM
(
device_id,
cg_id,
firmware_id,
best_status,
dmc_id
)SELECT device_id, cg_id, firmware_id, best_Status, dmc_id
from dm_djr_bulkjob where oltp_updated between '27-JUL-17' and '28-JUL-17'
このクエリは、私の一時テーブルにdm_djr_bulkjobテーブルからすべてのレコードを挿入します。 は、私は以下の優先度テーブルから最小としてbest_status優先順位を持つ2つの重複する値のうち一つのレコードをしたい
Duplicate records for device_id= 2009160 and firmware_id = 25822
(私たちはDEVICE_IDとfirmware_idに基づいて重複したレコードを持っている)重複レコードのうちの1つのレコードを選択します。 例:上記のクエリは、device_id = 2009160とfirmware_id = 25822の2つの重複したエントリを返しましたが、2つのレコードの中のbest_status = 'No Device Response'の優先順位は、
したがって、私の最終的なテンポラリテーブルへのレコード数は以下のようになります。
+----------+------+-----------+------------------+------+
| device_id| cg_id|firmware_id| best_status |dmc_id|
+----------+------+-----------+------------------+------+
| 2009160 | 000 |25822 |No Device Response|1736 |
| 2009157 | 000 |25745 |Wifi Deferred |1736 |
| 2009174 | 000 |25861 |Low Memory |1736 |
+----------+------+-----------+------------------+------+
優先順位テーブル
+-------------------+--------+
| status |priority|
+-------------------+--------+
|No Device Response |1 |
|401 |2 |
|402 |3 |
|500 |4 |
|Wifi Deferred |5 |
|Low Memory |6 |
| No Device Response|7 |
+-------------------+--------+
は、この要件を解決するために、クエリを提案してください。
ありがとうございます!
このクエリは、私の問題を解決しました..ありがとうございます。 –