私はOracle 10gを使用しています。私はさまざまな種類のフィールドの数を持つテーブルを持っています。これらのフィールドには、特定のサイトで特定の日付に特定のことが行われたことによる観測結果が含まれています。SQL - 不完全結合
ので:
ItemID, Date, Observation1, Observation2, Observation3...
各レコードには約40の観察があります。この時点でテーブル構造を変更することはできません。
残念ながら、すべての観測に(偶然に、またはサイトがその記録を作成できないために)入力されているわけではありません。私は、特定の項目に関するすべてのレコードをクエリの単一のレコードに結合し、できるだけ完全なものにする必要があります。これを行うには
簡単な方法は、
SELECT
ItemID,
MAX(Date),
MAX(Observation1),
MAX(Observation2)
etc.
FROM
Table
GROUP BY
ItemID
ようなものになるだろう。しかし、理想的に私はそれが最大/最小値、利用可能な最新の観測をしませ選ぶしたいと思います。私は、フォーム
SELECT
ItemID,
ObservationX,
ROW_NUMBER() OVER (PARTITION BY ItemID ORDER BY Date DESC) ROWNUMBER
FROM
Table
WHERE
ObservationX IS NOT NULL
にサブクエリを書き込み、アイテムIDのためではなく、このためには、40のサブクエリを必要とするフィールドの数をすべて一緒ROWNUMBERの1秒に参加することによってこれを行うことができます。
私の質問は、これを行うためのより簡潔な方法がないかどうかです。
+1、素敵です。よりコンパクトなソリューションのために、NVL2(val1、dt、date '1900-01-01')だけで注文できますか? – DCookie
@DCookie - それはよりコンパクトになるでしょう。しかし、NVL2を見るとすぐに私は一時停止します。なぜなら、NVL2の動作をすぐに覚えていないからです。私は、 'last_value'解析関数の' ignore nulls'節のようなものがありますが、集約関数の中にあることを期待しています。 –
本当にありがとうございます。 – George