0

私はアドバイスが必要な SQL 初心者です。以下を行うための最も効率的な(最も高速に実行されるクエリ)方法は何ですか-

後にテーブルからすべての列を選択します-

-「top_line_id」と「external_reference」の 2 つの列に含まれる一意の値に基づいて「Group By」を実行します。

-support_id などの別のフィールドに含まれる最大値または最小値 (どちらでもかまいません) に基づいて、各グループから 1 つのレコードを選択します。

私のチームの誰かが以下のクエリを提供しましたが、うまくいかないようです。実行しようとすると、「無効な関係演算子です」というエラー メッセージが表示されます。

Select * 
from STAGE.SFS_GH_R3_IB_ENTLMNT_CONTACTS
Where support_id, external_reference, top_line_id in (
         select max(support_id), 
                external_reference, 
                top_line_id from STAGE.SFS_GH_R3_IB_ENTLMNT_CONTACTS
)

もう 1 つ - Group By を実行している列には、一部のレコードに null 値が含まれています。クエリから除外してください。

ご提供いただけるご支援をいただければ幸いです。

4

2 に答える 2

2

これはグループごとのクエリと表現していますが、row_number() を使用する別のアプローチがあります。これは、「order by」句に基づいて、グループ内の各行を列挙します。次のクエリでは、external_reference と top_line_id に基づいて各グループを列挙し、support_id 順に並べています。

select *
from (Select t.*,
             row_number() over (partition by external_reference, top_line_id
                                order by support_id) as seqnum
      from STAGE.SFS_GH_R3_IB_ENTLMNT_CONTACTS t
     )
where seqnum = 1
于 2012-05-20T04:46:28.387 に答える
0

これはうまくいくはずです(テストできません)


SELECT
  *
FROM
  stage.sfs_gh_r3_ib_entlmnt_contacts
WHERE
  (support_id, external_reference, top_line_id) IN
    (
      SELECT
        max(support_id), 
        external_reference, 
        top_line_id
      FROM
        stage.sfs_gh_r3_ib_entlmnt_contacts
      WHERE
        external_reference IS NOT NULL AND
        top_line_id IS NOT NULL
      GROUP BY
        top_line_id, external_reference
    )
于 2012-05-20T04:49:43.487 に答える