J'essaie de sélectionner une période spécifique (jour et heures), afin de faire en moyenne des secondes que les gens passent à la surveillance d'un canal spécifique.
J'ai essayé cette fonction spécifique: (to_date) P >
select cust_id, ini_datetime,end_datetime, avg(qtd_seconds) as Avg_Sec, Channel from crm.tmp_4 where ini_datetime between ( to_date(2019-11-30 17:50:00.0, 'YYYY-MM-DD HH24:MI:SS.FF') and to_date(2019-11-30 18:00:00.0,'YYYY-MM-DD HH24:MI:SS.FF') ) and end_datetime between ( to_date(2019-11-30 19:40:00.0,'YYYY-MM-DD HH24:MI:SS.FF') and to_date(2019-11-30 19:50:00.0,'YYYY-MM-DD HH24:MI:SS.FF') ) group by cust_id,ini_datetime,end_datetime, Channel
3 Réponses :
La valeur doit être jointe à des guillemets, de sorte que votre requête doit être comme ceci: type de données date code> ne prend pas en charge les secondes fractionnées. Si vous avez besoin d'eux, utilisez
to_timettamp code> au lieu de
to_date code>. P> p>
Ok, j'ai changé la clause Where à: Où ini_datetime in (to_timettamp ('2019-11-30 17: 50: 00.0', 'aaaa-mm-dd HH24: MI: Ss.ff'), to_timettamp ('2019-11 -30 18: 00: 00.0 ',' AAAA-MM-DD HH24: MI: SS.FFF ')) et End_DateTime In (to_Timetamp (' 2019-11-30 19: 40: 00.0 ',' aaaa-mm-mm-dd HH24: MI: Ss.ff '), TO_TIMESTAMSAM (' 2019-11-30 19: 50: 00.0 ',' AAAA-MM-DD HH24: MI: SS.FFF ')) Groupe par SA, INI_DATETIME, END_DATÉTIME; Avec l'horodatage parce que j'ai besoin des fractions.Mais maintenant, la sortie est "Line 3:26 Fonction non valide" TO_TIMESTAMP '". Est-ce parce que ma date est "2019-11-30" et non "30-Nov-19"?
A littéral standard comme horodatage '2019-11-30 17:50:00' code> serait beaucoup moins à taper.
@Mary, je supposerais une simple faute de frappe. Peut-être une citation ou un support manquant.
Vous êtes si proche. Aussi vous devez supprimer la parenthèse au TO_Date CODE> La fonction prend une chaîne et le renvoie à ce jour.
Vous n'en passez pas de chaîne, mais certains personnages qui n'ont aucun sens à Oracle.
entre code> et millisecondes (
.0 code> et < code> .ff code>) car ils ne sont pas valides dans
to_date code>. p>
Vous pouvez utiliser Littéraux de l'horodatage Pour que cela soit beaucoup plus simple et plus facile à lire:
select cust_id, ini_datetime, end_datetime, channel , avg(qtd_seconds) as avg_sec from crm.tmp_4 where ini_datetime between timestamp '2019-11-30 17:50:00' and timestamp '2019-11-30 18:00:00' and end_datetime between timestamp '2019-11-30 19:40:00' and timestamp '2019-11-30 19:50:00' group by cust_id, ini_datetime, end_datetime, channel
Les chaînes littérales en SQL doivent être entourées de guillemets simples.