0

過去 18 か月間の訪問回数に基づいて、顧客を「優先」業者に関連付けようとしています。タイブレーカーは最新の訪問日です。タイブレーカーでちょっと困ってます。特定の MemberID の訪問数に基づいて両方とも 1 位にランク付けされた 2 つのレコードがある場合、その MemberID の MAX(EncounterDate) を持つレコードの IsFirst ビット列を 1 に設定したいと考えています。これを行うにはどうすればよいですか?

4

2 に答える 2

3

これはあなたを助けるかもしれません... これは既存の emp テーブルに基づく Oracle クエリです。問題を投稿するときに構造を作成することは良い考えだと思います。最初の選択を更新などに置き換えます...: テーブルを更新します SET your date = max_date (私の例では max_hire_date) WHERE your_field IN (私の例のように最大日付を選択します) AND rnk = 1 and rno = 1

SELECT * FROM 
 (  
 SELECT deptno
      , ename
      , sal
      , RANK() OVER (PARTITION BY deptno ORDER BY sal desc) rnk 
      , ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY sal desc) rno 
      , MAX(hiredate) OVER (PARTITION BY deptno ORDER BY deptno) max_hire_date
   FROM emp_test
  WHERE deptno = 20
 ORDER BY deptno
 )
 WHERE rnk = 1
   --AND rno = 1 -- or 2 or any other number...
/

SQL>

DEPTNO  ENAME   SAL    RNK  RNO HIREDATE    MAX_HIRE_DATE
-----------------------------------------------------------
 20     SCOTT   3000    1   1   1/28/2013   1/28/2013
 20     FORD    3000    1   2   12/3/1981   1/28/2013
于 2013-01-28T19:04:27.773 に答える
0

次の SQL は、特定のテーブルの構造を想定して、必要な情報を取得します。

select c.*, NumVisits, MaxVisitDate, MaxFirstVisitDate
       (select count(*)
        from visits v
        where v.customerid = c.customerid and 
              v.visi
from customers c join
     (select customerid,
             sum(case when visitdate between getdate() - 365*1.5 and getdate()
                      then 1 else 0
                  end) as NumVisits,
             max(visitdate) as MaxVisitDate,
             max(case when IsFirst = 1 then visitdate end) as MaxFirstVisitDate
      from visits
      group by customerid
     ) v
     on c.customerid = v.customerid

この情報から、やりたいことのロジックをまとめることができます。の場合MaxVisitDate = MaxFirstVisitDate、ビットは最新の日付に設定されます。

更新の質問に対する答えは次のようなものです。

update visits
    set IsFirst = 1
    where exists (select max(encounterDate)
                  from visits v2
                  where v2.customer_id = visits.customer_id
                  having max(encounterDate) = visits.encounterDate)
                 )
于 2013-01-28T18:46:03.287 に答える