0

この単純なクエリを機能させることはできません。

SELECT * FROM
(SELECT  h.*, h.NewValue AS STATUS,
         (SELECT h2.CreatedDate
          FROM siebel_service_request_history h2
          WHERE h2.Field = 'Status' AND h2.CreatedDate > h.CreatedDate AND
                h2.SiebelID = h.SiebelID
          ORDER BY h2.CreatedDate
          LIMIT 1
         ) AS nextCreatedDate
  FROM siebel_service_request_history h WHERE h.Field ='Status') h

  GROUP BY h.SiebelID, h.Status

grouping by で問題なく動作しSiebelID(ただし遅い)、 grouping by を追加すると、永遠にハングしStatusます。ただし、必要なデータを取得するには、グループ化に含まれる両方のフィールドが必要です。

salesforce_case_history テーブルに対してまったく同じクエリが実行され、機能しています (非常に高速に実行され、正確には、両方のテーブルにほぼ同じ数のレコードがあります (salesforce_case_history - -- 1159870 レコード VS siebel_service_request_history – 1202865 レコード)):

SELECT * FROM (SELECT h.*, h.NewValue AS STATUS,
         (SELECT h2.CreatedDate
          FROM salesforce_case_history h2
          WHERE h2.Field = 'Status' AND h2.CreatedDate > h.CreatedDate AND
                h2.CaseId = h.CaseId
          ORDER BY h2.CreatedDate
          LIMIT 1
         ) AS nextCreatedDate
  FROM salesforce_case_history h WHERE h.Field ='Status'
 ) h
GROUP BY h.CaseId, h.Status

また、salesforce_case_history で作成したのと同じ複合インデックスを、3 つのフィールド ( 、、 ) テーブルsiebel_service_request_historyを含む内部サブセレクト検索用に作成しました。私たちは知っていることのほとんどすべてを試しましたが、残念ながら、この問題の根本的な問題を突き止めることはできませんでした.SiebelIDCreatedDateField

4

1 に答える 1

0

試す:

SELECT  h.*, h.NewValue AS STATUS,
         (SELECT h2.CreatedDate
          FROM siebel_service_request_history h2
          WHERE h2.Field = 'Status' AND h2.CreatedDate > h.CreatedDate AND
                h2.SiebelID = h.SiebelID
          ORDER BY h2.CreatedDate
          LIMIT 1
         ) AS nextCreatedDate
  FROM siebel_service_request_history h WHERE h.Field ='Status'

  GROUP BY h.SiebelID, h.Status

余分な不要なサブクエリ ステップがありました。

また、サブクエリからテーブルを作成し、グループ化するものにインデックスを追加してから、select * from table をグループ化してみてください。私はすべてのルーチンでインデックス付きの一時テーブルを使用しています。

于 2013-09-27T08:43:28.303 に答える