このシナリオの問合せを手伝ってもらえますか。以下のケースでは、列Aの13,14が最も出現し、B(30)の値が13より大きいので、A = 13の単一行を返します。私たちはAの最大発生に関心があります。タイ・ブレーカーとみなす。私たちは法人顧客からのコールを取得する - それはB.11g Oracle集約SQL問合せ
A B
13 30
14 40
15 5
ユースケースのための40の14た最大値を返す必要がありますが1回発生(すべてが結ば)があり、以下の場合には
A B
13 30
13 12
14 10
14 25
15 5
。私たちは、ほとんどの通話が来て何時間になっているか知っていることに興味があります。
次の質問
さらに質問があります。 @GurVの '11g or lower'と@mathguyの 'dense_rank'の2つのソリューションのどちらかを使いたいのですが、どのようにすればいいのですか?
SELECT dv.id , u.email , dv.email_subject AS headline , dv.start_date , dv.closing_date, b.name AS business_name, ls.call_cost, dv.currency,
SUM(lsc.duration) AS duration, COUNT(lsc.id) AS call_count, ROUND(AVG(lsc.duration), 2) AS avg_duration
-- max(extract(HOUR from started)) keep (dense_rank last order by count(duration), max(duration)) as most_popular_hour
FROM deal_voucher dv
JOIN lead_source ls ON dv.id = ls.deal_id
JOIN lead_source_call lsc ON ls.PHONE_SID = lsc.phone_number_id
JOIN business b ON dv.business_id = b.id
JOIN users u ON b.id = u.business_id
AND TRUNC(dv.closing_date) = to_date('13-01-2017', 'dd-mm-yyyy')
AND lsc.status = 'completed' and lsc.duration >= 30
GROUP BY dv.id , u.email , dv.email_subject , dv.start_date , dv.closing_date, b.name, ls.call_cost, dv.currency
--, extract(HOUR from started)
14の場合、合計は35で40ではなくなります。これらをA列とB値の合計でグループ化するのですか? – Saif
@Smartの出力は期待されていません。それは入力の2番目のケースです – GurV
@smartありがとう。それはBの合計とは関係ありません。Bは通話時間(分)です。 –