4

申し訳ありませんが、以前にこの質問を失敗させた可能性があります...それでも私にはわかりません。

基本的に、レポートの「承認者」のグループを追跡する単一のテーブルがあります。また、レポートがいつ「作成」され、いつ「提出」されたかを追跡します。

レポートに日付/時刻の重複がある場合にフラグを立てることを検討しています。

例 (1 つのテーブル、「レポート」):

"Created"                 "Submitted"                "ApproverID"
4/20/2012 5:01:32 AM          4/20/2012 5:30:32 AM          10
4/20/2012 5:08:32 AM          4/20/2012 5:45:32 AM          10
4/20/2012 5:01:32 AM          4/19/2012 5:38:16 PM          15 

...次を返す必要があります(同じ承認者が日付/時刻をオーバーラップする場合)

 "Created"                 "Submitted"                "ApproverID"    
4/20/2012 5:01:32 AM          4/20/2012 5:30:32 AM          10            
4/20/2012 5:08:32 AM          4/20/2012 5:45:32 AM          10 

そのため、承認者 (この例では 10) には、これらのレポートと重複するウィンドウがありました。BETWEEN 句を使用した SELECT のように思えます...しかし、私は少し困惑しています。

次のような簡単なものがありました。

SELECT Created, LastModified, ApprovalGroupID, count(*) 
FROM   shifthandover.uniquereports
WHERE ApprovalGroupID between Created and LastModified

助けて感謝!

4

3 に答える 3

3

あなたの質問から、最初の (またはそれ以前の) レポートが作成された後、2 番目 (またはそれ以降) のレポートが作成されたときに「重複」が発生することを理解していますが、その前のレポートが提出される前に - つまり、承認者は複数のレポートで作業していました一度。あれは正しいですか?

レポート テーブルをそれ自体に結合してみてください。たとえば、次のようにします。

SELECT * FROM reports r1 
JOIN reports r2 
ON r1.approvalId=r2.approvalId 
AND r2.created>r1.created 
AND r2.created<r1.submitted
于 2012-05-15T22:16:05.360 に答える
1
SELECT   Created, LastModified, ApprovalGroupID, count(*) --whatever those are
FROM     uniquereports AS r1
JOIN     uniquereports AS r2.ApproverID = r1.ApproverID AND r2 ON r2.id = r1.id -- the unique id of the table, or use whatever combination to get a unique representation, which is important.
WHERE    r2.Created >= r1.Created AND r2.Created <= r1.LastModified OR
         r2.LastModified >= r1.Created AND r2.LastModified <= r1.LastModified OR
         r2.Created <= r1.Created AND r2.LastModified >= r1.LastModified OR
         r2.Created >= r1.Created AND r2.LastModified <= r1.LastModified             
GROUP BY r1.ApproverID

技術的にはレコードが作成される前に変更できないことを考慮して、最初の句よりも大きい場合をすでに検討したため、最後のOR句はここでは役に立ちません。すべてのケースを確実にするために、そこにまだ追加されています。r2.Createdr1.CreatedOR

于 2012-05-16T00:27:11.310 に答える
1

これにより、その承認者の承認者 ID と重複の数が提供されます。

select approver_id, count(*)/2 from (
  select t1.approver_id 
  from reports t1 
  join reports t2 on 
     t2.approver_id = t1.approver_id 
     AND t1.id <> t2.id 
  where
     NOT((t1.submitted < t2.created) 
     OR (t1.created > t2.submitted))
  ) t2 group by approver_id;

count(*)/2 があるので、A が B に重なり、B が A に重なる順列を二重に数えることはありません。

于 2012-05-16T14:12:47.763 に答える