一言で言えば、列でグループ化しようとしていますが、その列がそうでない場合、null
または0
その場合でもそれらの行を取得したいのですが、グループ化されていません。私はこのテーブルを持っていますsome_table
:
+--------+----------+---------------------+-------+
| id | other_id | date_value | value |
+--------+----------+---------------------+-------+
| 1 | abc | 2011-04-20 21:03:05 | 104 |
| 2 | abc | 2011-04-20 21:03:04 | 229 |
| 3 | xyz | 2011-04-20 21:03:03 | 130 |
| 4 | abc | 2011-04-20 21:02:09 | 97 |
| 5 | 0 | 2011-04-20 21:02:08 | 65 |
| 6 | xyz | 2011-04-20 21:02:07 | 101 |
| 7 | | 2011-04-20 21:02:07 | 200 |
| 8 | 0 | 2011-04-20 21:02:07 | 201 |
| 9 | | 2011-04-20 21:02:07 | 202 |
+--------+----------+---------------------+-------+
other_id
行を選択してでグループ化し、グループ化された行の数も含めたいと思いました。このクエリは機能します:
select id, other_id, date_value, value, cnt from
(
SELECT id, other_id, date_value, value,
ROW_NUMBER() OVER (partition by other_id order BY Date_Value desc) r,
count(*) OVER (partition by other_id) cnt
FROM some_table
)
where r = 1
結果は次のとおりです。
+--------+----------+---------------------+-------+-------+
| id | other_id | date_value | value | count |
+--------+----------+---------------------+-------+-------+
| 1 | abc | 2011-04-20 21:03:05 | 104 | 3 |
| 3 | xyz | 2011-04-20 21:03:03 | 130 | 2 |
| 5 | 0 | 2011-04-20 21:02:08 | 65 | 2 |
| 7 | | 2011-04-20 21:02:07 | 200 | 2 |
+--------+----------+---------------------+-------+-------+
other_id
問題は、null
またはの行をグループ化したくないことです0
。したがって、望ましい結果は次のとおりです。
+--------+----------+---------------------+-------+-------+
| id | other_id | date_value | value | count |
+--------+----------+---------------------+-------+-------+
| 1 | abc | 2011-04-20 21:03:05 | 104 | 3 |
| 3 | xyz | 2011-04-20 21:03:03 | 130 | 2 |
| 5 | 0 | 2011-04-20 21:02:08 | 65 | 1 |
| 7 | | 2011-04-20 21:02:07 | 200 | 1 |
| 8 | 0 | 2011-04-20 21:02:07 | 201 | 1 |
| 9 | | 2011-04-20 21:02:07 | 202 | 1 |
+--------+----------+---------------------+-------+-------+
ご覧のとおり、すべてがグループ化されている場合を除いて、other_id
またはnull
それら0
がまだ選択されているがグループ化されていない場合を除きます。私も で注文しようとしていdate_value
ます。
WHERE
句に句を追加しようとしましたOVER
:
OVER (partition by other_id WHERE other_id IS NOT NULL AND other_id IS NOT '0' order BY Date_Value desc)
-- this produces an error: ORA-00907: missing right parenthesis
2 番目のselect
クエリを実行して、最初の結果を 2 番目の結果の上にスタックしようと考えましたが、順序が原因でうまくいかないと思います。
このように条件付きでグループ化する方法はありますか?