私は、次のデータがあります。反復処理テーブル内のグループを超える
cte1
===========================
m_ids |p_id |level
---------|-----------|-----
{123} |98 |1
{123} |111 |2
{432,222}|215 |1
{432,222}|215 |1
{432,222}|240 |2
{432,222}|240 |2
{432,222}|437 |3
{432,222}|275 |3
私は、次の操作を実行する必要があります。すべてのために、以下のアルゴリズム
- によって
エキス
p_id
を同一の列m_ids
- 各gro up:
2.I.グループレコードbyp_id
2.II.注文の記録をlevel
2.IIIで注文します。これは最後のために(私はarray_length
を取得しています場所はおそらく間違った)m_ids
長さと正確な数でp_id
を選択し、これまでのところ、私は完全にこのアルゴリズムを記述するために失敗する最大とlevel
、私が書きましたその一部:m_ids={123}
ためgrouped_cte1
が
SELECT id
FROM grouped_cte1
GROUP BY id,
level
HAVING Count(*) = array_length(grouped_cte1.m_ids, 1)
ORDER BY level DESC
LIMIT 1
ある
m_ids |p_id |level
---------|-----------|-----
{123} |98 |1
{123} |111 |2
とm_ids={432,222}
ためには
m_ids |p_id |level
---------|-----------|-----
{432,222}|215 |1
{432,222}|215 |1
{432,222}|240 |2
{432,222}|240 |2
{432,222}|437 |3
{432,222}|275 |3
等
2である)以下でP.1からクエリを組み合わせます。各m_ids
についてlevel=1
と、次の抽出物p_id
は:
select m_ids, p_id from cte1 where level=1 --also selecting m_ids for joining later`
:
m_ids |p_id
---------|----
{123} |98
{432,222}|215
望ましい結果:
m_ids |result_1 |result_2
---------|-----------|--------
{123} |111 |98
{432,222}|240 |215
だから誰も私が最初の解決助けてください可能性がありアルゴリズムの一部および(オプション)を2番目の部分と1つのクエリで結合しますか?
EDIT:それを反復しながら、m_ids
によってサブテーブルに提示テーブルを破る
1:はこれまでのところ私が失敗します。
2.クエリの対応する行に対してarray_length(grouped_cte1.m_ids, 1)
の計算を実行する。
あなたは正しく、私は本当に「望ましい結果」で間違いを犯しました!あなたの答えは信じられないほど役に立ちます! –
'm_ids = {432,222} 'と同じです。お役に立てて嬉しいです。 –
申し訳ありませんが、私はすでにそれを受け入れたと思った; D –