0

私はうまく機能する素晴らしいクエリを持っています:

select distinct f.client_id
from f_accession_daily f
left join SalesDWH..TestPractices tests
on tests.ClientID=f.CLIENT_ID
where tests.ClientID is null
group by f.client_id
having max(f.received_date) between '20120601' and '20120630'

f.client_id結果セットを、その特定のカウント(*)がf.client_id前の月の40以上であった場合(つまり、「20120501」と「20120530」の間)にのみ制限する必要があります。

これが私が試したことです:

select distinct f.client_id
from f_accession_daily f
left join SalesDWH..TestPractices tests
on tests.ClientID=f.CLIENT_ID
where tests.ClientID is null
group by f.client_id
having max(f.received_date) between '20120601' and '20120630'
) NotOrderedIn6Months
on f.CLIENT_ID=NotOrderedIn6Months.CLIENT_ID
right join
(select client_id,COUNT(*) count from F_ACCESSION_DAILY
where RECEIVED_DATE between '20120501' and '20120530'
group by CLIENT_ID
having COUNT(*)>=40
) Having40
on Having40.CLIENT_ID=f.CLIENT_ID
4

2 に答える 2

1

先月のデータを事前に集計し(5月には30日ではなく31日あります)、それに参加します。

   select f.client_id
     from f_accession_daily f
     join (
        select client_id
          from f_accession_daily
         where received_date between '20120501' and '20120531'
      group by client_id
        having count(*) >= 40
      ) A on A.client_id = f.client_id
left join SalesDWH..TestPractices tests
       on tests.ClientID=f.CLIENT_ID
    where tests.ClientID is null
 group by f.client_id
   having max(f.received_date) between '20120601' and '20120630';

すでにGROUPBYがある場合は、DISTINCTは必要ないことにも注意してください。

于 2012-11-28T22:47:44.367 に答える
1

追加するだけ

AND f.client_id IN
(SELECT client_id FROM F_ACCESSION_DAILY
WHERE RECEIVED_DATE BETWEEN '20120501' AND '20120530'
GROUP BY client_id
HAVING COUNT(*) >= 40)

元のクエリのwhere句に。

于 2012-11-28T22:58:20.380 に答える