Können Sie mir bitte helfen, eine Abfrage für dieses Szenario zu bekommen. Im folgenden Fall sollte ich eine einzelne Zeile von A = 13 zurückgeben, da 13,14 in Spalte A die meisten Vorkommen hat und der Wert von B (30) für 13 größer ist. Wir sind an maximalen Vorkommen von A interessiert und im Falle von Unentschieden sollte B als Tiebreaker betrachtet werden.11g Oracle Aggregat SQL-Abfrage
A B
13 30
13 12
14 10
14 25
15 5
Im folgenden Fall, in dem einzelnen Vorkommen von A (alle gebunden) es 14 mit Maximalwert von 40 für B.
A B
13 30
14 40
15 5
Use Case zurückgeben soll - wir Anrufe von Firmenkunden zu bekommen. Wir sind daran interessiert zu wissen, zu welchen Stunden des Tages die meisten Anrufe kommen und im Falle eines Unentschiedens - welche der am stärksten frequentierten Stunden hat den längsten Anruf.
Weitere Frage
Es gibt weitere Fragen dazu. Ich möchte eine der beiden Lösungen verwenden - "11g oder niedriger" von @GurV oder "dicht_Rank" von @mathguy in größeren Abfrage unten, wie kann ich es tun.
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)
wenn 14, dann wird insgesamt 35 und nicht 40! meinst du diese nach A-Spalte und Summe B-Werte zu gruppieren? – Saif
@ Smart, das ist nicht erwartet, Ausgabe, das ist der zweite Fall der Eingabe – GurV
@smart danke. Es hat nichts mit der Summe von B zu tun. B ist die Anrufdauer in Minuten. –